Wo ist Taste.DialOgresult in WPF?
-
20-09-2019 - |
Frage
Im System.Windows.Formen.Taste Es gibt eine Immobilie Dialogresult, wo ist diese Eigenschaft in der System.Windows.Kontrollen.Taste (WPF)?
Lösung
Es gibt keine integrierte Taste. Dialogresult, aber Sie können Ihre eigene (falls möchten) mit einer einfachen beigefügten Eigenschaft erstellen:
public class ButtonHelper
{
// Boilerplate code to register attached property "bool? DialogResult"
public static bool? GetDialogResult(DependencyObject obj) { return (bool?)obj.GetValue(DialogResultProperty); }
public static void SetDialogResult(DependencyObject obj, bool? value) { obj.SetValue(DialogResultProperty, value); }
public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached("DialogResult", typeof(bool?), typeof(ButtonHelper), new UIPropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
// Implementation of DialogResult functionality
Button button = obj as Button;
if(button==null)
throw new InvalidOperationException(
"Can only use ButtonHelper.DialogResult on a Button control");
button.Click += (sender, e2) =>
{
Window.GetWindow(button).DialogResult = GetDialogResult(button);
};
}
});
}
Auf diese Weise können Sie schreiben:
<Button Content="Click Me" my:ButtonHelper.DialogResult="True" />
und erhalten Sie Verhaltensmittel entsprechen den WinForms (Klicken auf die Schaltfläche führt dazu, dass das Dialogfeld das angegebene Ergebnis schließt und zurückgibt).
Andere Tipps
Es gibt kein Button.DialogResult
in WPF. Sie müssen nur das festlegen DialogResult
des Window
zu wahr oder falsch:
private void buttonOK_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
Stellen Sie einfach sicher, dass Sie das Formular verwendet haben ShowDialog
statt Show
. Wenn Sie letzteres tun, erhalten Sie die folgende Ausnahme:
InvalidOperationException wurde nicht behandelt
Dialogresult kann erst festgelegt werden, nachdem das Fenster als Dialog erstellt und angezeigt wurde.
MessageBoxResult result = MessageBox.Show("","");
if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else
{
// CODE IN HERE
}