Wie kann ich modalen Dialog für eine Seite in meiner WPF-Anwendung zu machen?

StackOverflow https://stackoverflow.com/questions/173652

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe ein WPF-Fenster, das eines unter anderen Kontrollen hat einen Rahmen hostet. In diesem Rahmen zeige ich verschiedene Seiten. Gibt es Möglichkeit, einen Dialog modal nur auf einer Seite zu machen? Wenn ich den Dialog bin zeigen sollte es nicht möglich sein, auf jedem Steuerelement auf der Seite zu klicken, aber es sollte auf einer Kontrolle auf dem gleichen Fenster klicken möglich sein, die nicht auf der Seite.

War es hilfreich?

Lösung

Wenn ich richtig bin in Ihrer Nachricht zu interpretieren, wollen Sie etwas, das ähnlich funktioniert wie Billy Hollis zeigt in seiner StaffLynx Anwendung .

Ich baute vor kurzem eine ähnliche Kontrolle und es stellt sich heraus, dass diese Art von Idee ist relativ einfach in WPF zu implementieren. Ich habe eine benutzerdefinierte Steuerelement namens DialogPresenter. In der Steuervorlage für die individuelle Steuerung, fügte ich Markup ähnlich dem folgenden:

<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
  <Grid>
    <ContentControl>
      <ContentPresenter />
    </ContentControl>
    <!-- The Rectangle is what simulates the modality -->
    <Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
    <Grid x:Name="Dialog" Visibility="Collapsed">
      <!-- The template for the dialog goes here (borders and such...) -->
      <ContentPresenter x:Name="PART_DialogView" />
    </Grid>
  </Grid>
  <ControlTemplate.Triggers>
    <!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
  </ControlTemplate.Triggers>
</ControlTemplate>

Ich habe auch eine Show(Control view) Methode, die die die ‚PART_DialogView‘ findet, und fügt im Hinblick auf die Content Eigenschaft die übergeben.

Dies ermöglicht es mir dann die DialogPresenter wie folgt zu verwenden:

<controls:DialogPresenter x:Name="DialogPresenter">
  <!-- Normal parent view content here -->
  <TextBlock>Hello World</TextBlock>
  <Button>Click Me!</Button>
</controls:DialogPresenter>

Um die Tasten Ereignishandler (oder gebundene Befehl), habe ich einfach die Karte aufrufen () -Methode des DialogPresenter.

Sie können auch leicht Scaletransform-Markup zur DialogPresenter Vorlage hinzufügen gezeigten Effekte im Video zu bekommen Skalierung. Diese Lösung hat sauber und ordentlich individuellen Steuercode und eine sehr einfache Schnittstelle für UI-Programmierer-Team.

Hope, das hilft!

Andere Tipps

Ich habe ein Projekt auf Github das ist eine benutzerdefinierte FrameworkElement, die Sie modalen Inhalt ermöglicht über anzuzeigen der primäre Inhalt.

Die Steuerung kann wie folgt verwendet werden:

<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
    <TabControl Margin="5">
            <Button Margin="55"
                    Padding="10"
                    Command="{Binding ShowModalContentCommand}">
                This is the primary Content
            </Button>
        </TabItem>
    </TabControl>

    <c:ModalContentPresenter.ModalContent>
        <Button Margin="75"
                Padding="50"
                Command="{Binding HideModalContentCommand}">
            This is the modal content
        </Button>
    </c:ModalContentPresenter.ModalContent>

</c:ModalContentPresenter>

Features:

  • Displays beliebiger Inhalt.
  • Deaktiviert nicht den Hauptinhalt während des modale Inhalt angezeigt wird.
  • Deaktiviert Maus und Tastatur Zugriff auf den Hauptinhalt während der modalen Inhalt angezeigt wird.
  • Wird nur auf den Inhalt modal es deckt nicht die gesamte Anwendung.
  • kann durch Bindung an die IsModal Eigenschaft in einer MVVM freundlichen Art und Weise verwendet werden.

Warum nicht einfach verschachtelte Nachricht verwenden Pumpen modal Steuerelemente erstellen

http://deanchalk.com/wpf-modal -Controls-via-dispatcherframe-verschachtelten-message-Pumpen /

Sie suchen nicht nach einem modalen Dialog hier. Sie müssen eine Funktion, die die „Seite“ Steuerung, zeigt einen Dialog, und aktiviert es wird deaktiviert, wenn der Dialog geschlossen wird.

Ich bin mir nicht sicher, ob Sie verstehen, was ein modaler Dialog obwohl tun zu verstehen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top