Dov'è Button.Dialogresult in WPF?
-
20-09-2019 - |
Domanda
In System.Windows.Le forme.Pulsante C'è una proprietà Dialogresult, dov'è questa proprietà in System.Windows.Controlli.Pulsante (WPF)?
Soluzione
Non esiste un pulsante integrato.Dialogresult, ma puoi crearne uno tuo (se lo desideri) usando una semplice proprietà allegata:
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);
};
}
});
}
Questo ti permetterà di scrivere:
<Button Content="Click Me" my:ButtonHelper.DialogResult="True" />
e ottenere un comportamento equivalente a Winforms (facendo clic sul pulsante fa chiudere la finestra di dialogo e restituire il risultato specificato)
Altri suggerimenti
Non c'è Button.DialogResult
in wpf. Devi solo impostare il DialogResult
del Window
a vero o falso:
private void buttonOK_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
Assicurati solo di aver mostrato il modulo usando ShowDialog
piuttosto che Show
. Se fai quest'ultimo otterrai la seguente eccezione:
InvalidOperationException non era gestita
Dialogresult può essere impostato solo dopo la creazione della finestra e mostrato come finestra di dialogo.
MessageBoxResult result = MessageBox.Show("","");
if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else
{
// CODE IN HERE
}