Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Presentation Foundation (WPF) bietet Möglichkeiten zum Entwerfen eigener Dialogfelder. Dialogfelder sind Fenster, aber mit einer bestimmten Absicht und Benutzererfahrung. In diesem Artikel wird erläutert, wie ein Dialogfeld funktioniert und welche Arten von Dialogfeldern Sie erstellen und verwenden können. Dialogfelder werden verwendet, um:
- Zeigen Sie benutzern bestimmte Informationen an.
- Informationen von Benutzern erfassen.
- Informationen sowohl anzeigen als auch erfassen.
- Zeigen Sie eine Eingabeaufforderung des Betriebssystems an, z. B. das Druckfenster.
- Wählen Sie eine Datei oder einen Ordner aus.
Diese Fenstertypen werden als Dialogfelder bezeichnet. Ein Dialogfeld kann auf zwei Arten angezeigt werden: modal und moduslos.
Das Anzeigen eines modalen Dialogfelds für den Benutzer ist eine Technik, mit der die Anwendung die Aktion unterbricht, bis der Benutzer das Dialogfeld schließt. Dies kommt in der Regel in Form einer Eingabeaufforderung oder Warnung. Mit anderen Fenstern in der Anwendung kann erst interagiert werden, nachdem das Dialogfeld geschlossen wurde. Sobald das modale Dialogfeld geschlossen wurde, wird die Anwendung fortgesetzt. Die am häufigsten verwendeten Dialogfelder werden verwendet, um eine geöffnete Datei anzuzeigen oder eine Dateiaufforderung zu speichern, das Druckerdialogfeld anzuzeigen oder den Benutzer mit einem bestimmten Status zu benachrichtigen.
Ein Dialogfeld ohne Modus verhindert nicht, dass ein Benutzer andere Fenster aktiviert, während es geöffnet ist. Wenn ein Benutzer z. B. Vorkommen eines bestimmten Worts in einem Dokument finden möchte, öffnet ein Hauptfenster häufig ein Dialogfeld, um einen Benutzer zu fragen, nach welchem Wort er sucht. Da die Anwendung nicht verhindern möchte, dass der Benutzer das Dokument bearbeitet, muss das Dialogfeld nicht modal sein. Ein modellfreies Dialogfeld enthält mindestens eine Schaltfläche Schließen zum Schließen des Dialogfelds. Andere Schaltflächen können bereitgestellt werden, um bestimmte Funktionen auszuführen, z. B. eine Schaltfläche " Weitersuchen ", um das nächste Wort in einer Wortsuche zu finden.
Mit WPF können Sie mehrere Arten von Dialogfeldern erstellen, z. B. Meldungsfelder, allgemeine Dialogfelder und benutzerdefinierte Dialogfelder. In diesem Artikel werden die einzelnen Beispiele erläutert, und das Dialogfeldbeispiel enthält passende Beispiele.
Meldungsfelder
Ein Meldungsfeld ist ein Dialogfeld, das verwendet werden kann, um Textinformationen anzuzeigen und Benutzern das Treffen von Entscheidungen mit Schaltflächen zu ermöglichen. Die folgende Abbildung zeigt ein Meldungsfeld, das eine Frage stellt und dem Benutzer drei Schaltflächen zum Beantworten der Frage bereitstellt.
Zum Erstellen eines Meldungsfelds verwenden Sie die MessageBox Klasse. MessageBox Ermöglicht ihnen das Konfigurieren des Meldungsfeldtexts, des Titels, des Symbols und der Schaltflächen.
Weitere Informationen finden Sie unter Öffnen eines Meldungsfelds.
Allgemeine Dialogfelder
Windows implementiert verschiedene Arten von wiederverwendbaren Dialogfeldern, die allen Anwendungen gemeinsam sind, einschließlich Dialogfeldern zum Auswählen von Dateien und Drucken.
Da diese Dialogfelder vom Betriebssystem bereitgestellt werden, werden sie für alle Anwendungen freigegeben, die auf dem Betriebssystem ausgeführt werden. Diese Dialogfelder bieten eine konsistente Benutzererfahrung und werden als gängige Dialogfelder bezeichnet. Wenn ein Benutzer ein gemeinsames Dialogfeld in einer Anwendung verwendet, muss er nicht erfahren, wie dieses Dialogfeld in anderen Anwendungen verwendet wird.
WPF kapselt die geöffnete Datei, speichert Die Datei, öffnet den Ordner und druckt allgemeine Dialogfelder und macht sie als verwaltete Klassen verfügbar, die Sie verwenden können.
Weitere Informationen zu allgemeinen Dialogfeldern finden Sie in den folgenden Artikeln:
- So wird's gezeigt: Anzeigen eines allgemeinen Dialogfelds
- Anzeigen des Dialogfelds "Datei öffnen"
- Anzeigen des Dialogfelds "Datei speichern"
- Dialogfeld 'Ordner öffnen'
- Anzeigen des Dialogfelds "Drucken"
Benutzerdefinierte Dialogfelder
Allgemeine Dialogfelder sind zwar nützlich und sollten nach Möglichkeit verwendet werden, aber sie unterstützen nicht die Anforderungen domänenspezifischer Dialogfelder. In diesen Fällen müssen Sie eigene Dialogfelder erstellen. Wie wir sehen, ist ein Dialogfeld ein Fenster mit speziellen Verhaltensweisen. Window implementiert diese Funktionen und Sie verwenden das Fenster, um benutzerdefinierte modale und nicht modale Dialogboxen zu erstellen.
Es gibt viele Entwurfsüberlegungen, die sie berücksichtigen müssen, wenn Sie ein eigenes Dialogfeld erstellen. Obwohl sowohl ein Anwendungsfenster als auch ein Dialogfeld Ähnlichkeiten enthalten, z. B. das Freigeben derselben Basisklasse, wird ein Dialogfeld für einen bestimmten Zweck verwendet. Normalerweise ist ein Dialogfeld erforderlich, wenn Sie einen Benutzer zur Eingabe von Informationen oder Antworten auffordern müssen. In der Regel pausiert die Anwendung, während das Dialogfeld angezeigt wird, sodass der Zugriff auf den Rest der Anwendung eingeschränkt wird. Sobald das Dialogfeld geschlossen wurde, wird die Anwendung fortgesetzt. Interaktionen nur auf das Dialogfeld zu beschränken, ist jedoch keine Voraussetzung.
Wenn ein WPF-Fenster geschlossen wird, kann es nicht erneut geöffnet werden. Benutzerdefinierte Dialogfelder sind WPF-Fenster und die gleiche Regel gilt. Informationen zum Schließen eines Fensters finden Sie unter " Schließen eines Fensters oder Dialogfelds".
Implementieren eines Dialogfelds
Befolgen Sie beim Entwerfen eines Dialogfelds die folgenden Vorschläge, um eine gute Benutzererfahrung zu erzielen:
❌ Überladen Sie das Dialogfeld nicht. Die Dialogoberfläche dient dazu, dass der Benutzer einige Daten eingibt oder eine Auswahl treffen kann.
✔️ Stellen Sie eine OK-Schaltfläche bereit, um das Fenster zu schließen.
✔️ Legen Sie die Eigenschaft der OK-SchaltflächeIsDefault so fest, dass true
der Benutzer die EINGABETASTE drücken kann, um das Fenster anzunehmen und zu schließen.
✔️ ERWÄGEN SIE das Hinzufügen einer Schaltfläche "Abbrechen ", damit der Benutzer das Fenster schließen kann und angibt, dass er nicht fortfahren möchte.
✔️ Legen Sie die Eigenschaft der Schaltfläche "Abbrechen" auf IsCancel fest, damit Benutzer die true
drücken können, um das Fenster zu schließen.
✔️ Legen Sie den Titel des Fensters so fest, dass er genau beschreibt, was das Dialogfeld darstellt oder was der Benutzer mit dem Dialogfeld tun soll.
✔️ Legen Sie mindestbreiten- und Höhenwerte für das Fenster fest, hindern Sie den Benutzer daran, die Größe des Fensters zu klein zu ändern.
✔️ ERWÄGEN SIE, die Möglichkeit deaktivieren, das Fenster in der Größe zu ändern, wenn ShowInTaskbar auf false
gesetzt ist. Sie können die Größenänderung deaktivieren, indem Sie ResizeMode auf NoResize setzen.
Der folgende Code veranschaulicht diese Konfiguration.
<Window x:Class="Dialogs.Margins"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Change Margins"
Closing="Window_Closing"
MinHeight="200"
MinWidth="300"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize"
ShowInTaskbar="False"
WindowStartupLocation="CenterOwner"
FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">
<Grid Margin="10">
<Grid.Resources>
<!-- Default settings for controls -->
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="0,3,5,5" />
<Setter Property="Padding" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="0,0,0,5" />
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="70" />
<Setter Property="Height" Value="25" />
<Setter Property="Margin" Value="5,0,0,0" />
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<!-- Left,Top,Right,Bottom margins-->
<Label Grid.Column="0" Grid.Row="0">Left Margin:</Label>
<TextBox Name="leftMarginTextBox" Grid.Column="1" Grid.Row="0" />
<Label Grid.Column="0" Grid.Row="1">Top Margin:</Label>
<TextBox Name="topMarginTextBox" Grid.Column="1" Grid.Row="1"/>
<Label Grid.Column="0" Grid.Row="2">Right Margin:</Label>
<TextBox Name="rightMarginTextBox" Grid.Column="1" Grid.Row="2" />
<Label Grid.Column="0" Grid.Row="3">Bottom Margin:</Label>
<TextBox Name="bottomMarginTextBox" Grid.Column="1" Grid.Row="3" />
<!-- Accept or Cancel -->
<StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Name="okButton" Click="okButton_Click" IsDefault="True">OK</Button>
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
</StackPanel>
</Grid >
</Window>
Der obige XAML-Code erstellt ein Fenster, das ähnlich wie in der folgenden Abbildung aussieht:
Benutzeroberflächenelemente, die ein Dialogfeld öffnen
Die Benutzeroberfläche für ein Dialogfeld erstreckt sich auch in die Menüleiste oder die Schaltfläche des Fensters, das es öffnet. Wenn ein Menüelement oder eine Schaltfläche eine Funktion ausführt, die eine Benutzerinteraktion über ein Dialogfeld erfordert, bevor die Funktion fortgesetzt werden kann, sollte das Steuerelement am Ende seiner Aufschrift einen Auslassungspunkt verwenden.
<MenuItem Header="_Margins..." Click="formatMarginsMenuItem_Click" />
<!-- or -->
<Button Content="_Margins..." Click="formatMarginsButton_Click" />
Wenn ein Menüelement oder eine Schaltfläche eine Funktion ausführt, die ein Dialogfeld anzeigt, das keine Benutzerinteraktion erfordert, z. B. ein Dialogfeld 'Info', ist kein Auslassungspunkt erforderlich.
Menüelemente
Menüelemente sind eine häufige Methode, um Benutzern Anwendungsaktionen bereitzustellen, die in verwandte Themen gruppiert sind. Wahrscheinlich haben Sie das Menü "Datei" in vielen verschiedenen Anwendungen gesehen. In einer typischen Anwendung bietet das Menüelement "Datei " Möglichkeiten, eine Datei zu speichern, eine Datei zu laden und eine Datei zu drucken. Wenn die Aktion ein modales Fenster zeigt, enthält die Kopfzeile in der Regel Auslassungspunkte, wie in der folgenden Abbildung dargestellt.
Zwei der Menüelemente weisen Auslassungspunkte auf: ...
. Dadurch kann der Benutzer erkennen, dass beim Auswählen dieser Menüelemente ein modales Fenster angezeigt wird und die Anwendung angehalten wird, bis der Benutzer es schließt.
Diese Designtechnik ist eine einfache Methode, mit der Sie Ihren Benutzern mitteilen können, was sie erwarten sollten.
Knöpfe
Sie können dem im Abschnitt "Menüelemente " beschriebenen Prinzip folgen. Verwenden Sie Auslassungspunkte im Schaltflächentext, um anzugeben, dass ein modales Dialogfeld angezeigt wird, wenn der Benutzer auf die Schaltfläche klickt. In der folgenden Abbildung gibt es zwei Schaltflächen, und es ist leicht zu verstehen, welche Schaltfläche ein Dialogfeld anzeigt:
Zurückgeben eines Ergebnisses
Das Öffnen eines weiteren Fensters, insbesondere eines modalen Dialogfelds, ist eine hervorragende Möglichkeit, Status und Informationen an den aufrufenden Code zurückzugeben.
Modale Dialogfelder
Wenn ein Dialogfeld durch Aufrufen ShowDialog()angezeigt wird, wartet der Code, der das Dialogfeld geöffnet hat, bis die ShowDialog
Methode zurückgegeben wird. Wenn die Methode zurückgegeben wird, muss der aufgerufene Code entscheiden, ob die Verarbeitung fortgesetzt oder die Verarbeitung beendet werden soll. Der Benutzer gibt dies im Allgemeinen durch Drücken einer OK- oder Abbrechen-Schaltfläche im Dialogfeld an.
Wenn die Schaltfläche OK gedrückt wird, sollte ShowDialog
so gestaltet sein, dass true
zurückgegeben wird, und die Schaltfläche Abbrechen sollte false
zurückgeben. Dies wird erreicht, indem die DialogResult Eigenschaft festgelegt wird, wenn die Schaltfläche gedrückt wird.
private void okButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = true;
private void cancelButton_Click(object sender, RoutedEventArgs e) =>
DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = True
End Sub
Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
DialogResult = False
End Sub
Die DialogResult Eigenschaft kann nur festgelegt werden, wenn das Dialogfeld mit ShowDialog()angezeigt wurde. Wenn die DialogResult
Eigenschaft festgelegt ist, wird das Dialogfeld geschlossen.
Wenn die Eigenschaft einer Schaltfläche auf IsCancel gesetzt ist und das Fenster mit true
geöffnet wird, schließt die ShowDialog() das Fenster und setzt auf DialogResult
.
Weitere Informationen zum Schließen von Dialogfeldern finden Sie unter Schließen eines Fensters oder Dialogfelds.
Verarbeiten der Antwort
Der ShowDialog() Wert gibt einen booleschen Wert zurück, der angibt, ob der Benutzer das Dialogfeld akzeptiert oder abgebrochen hat. Wenn Sie den Benutzer auf etwas aufmerksam machen, aber keine Entscheidung treffen oder Daten bereitstellen müssen, können Sie die Antwort ignorieren. Die Antwort kann auch überprüft werden, indem die Eigenschaft DialogResult untersucht wird. Der folgende Code zeigt, wie die Antwort verarbeitet wird:
var dialog = new Margins();
// Display the dialog box and read the response
bool? result = dialog.ShowDialog();
if (result == true)
{
// User accepted the dialog box
MessageBox.Show("Your request will be processed.");
}
else
{
// User cancelled the dialog box
MessageBox.Show("Sorry it didn't work out, we'll try again later.");
}
Dim marginsWindow As New Margins
Dim result As Boolean? = marginsWindow.ShowDialog()
If result = True Then
' User accepted the dialog box
MessageBox.Show("Your request will be processed.")
Else
' User cancelled the dialog box
MessageBox.Show("Sorry it didn't work out, we'll try again later.")
End If
marginsWindow.Show()
Nicht-modales Dialogfeld
Rufen Sie auf, um Show()ein Dialogfeld ohne Modus anzuzeigen. Das Dialogfeld sollte mindestens eine Schaltfläche " Schließen " bereitstellen. Andere Schaltflächen und interaktive Elemente können bereitgestellt werden, um eine bestimmte Funktion auszuführen, z. B. eine Schaltfläche " Weitersuchen ", um das nächste Wort in einer Wortsuche zu finden.
Da ein modelloses Dialogfeld nicht verhindert, dass der aufrufende Code weiterläuft, müssen Sie eine andere Möglichkeit zur Rückgabe eines Ergebnisses bereitstellen. Führen Sie einen der folgenden Schritte aus:
- Machen Sie eine Datenobjekteigenschaft im Fenster verfügbar.
- Behandeln Sie das Window.Closed-Ereignis im aufrufenden Code.
- Erstellen Sie Ereignisse im Fenster, die ausgelöst werden, wenn der Benutzer ein Objekt auswählt oder eine bestimmte Schaltfläche drückt.
Im folgenden Beispiel wird das Window.Closed Ereignis verwendet, um dem Benutzer beim Schließen des Dialogfelds ein Meldungsfeld anzuzeigen. Die angezeigte Meldung verweist auf eine Eigenschaft des geschlossenen Dialogfelds. Weitere Informationen zum Schließen von Dialogfeldern finden Sie unter Schließen eines Fensters oder Dialogfelds.
var marginsWindow = new Margins();
marginsWindow.Closed += (sender, eventArgs) =>
{
MessageBox.Show($"You closed the margins window! It had the title of {marginsWindow.Title}");
};
marginsWindow.Show();
Dim marginsWindow As New Margins
AddHandler marginsWindow.Closed, Sub(sender As Object, e As EventArgs)
MessageBox.Show($"You closed the margins window! It had the title of {marginsWindow.Title}")
End Sub
marginsWindow.Show()
Siehe auch
.NET Desktop feedback