Où est Button.dialogreult dans WPF?
-
20-09-2019 - |
Question
Dans System.Windows.Formes.Bouton il y a une propriété Dialogreult, où est cette propriété dans le System.Windows.Les contrôles.Bouton (WPF)?
La solution
Il n'y a pas de bouton intégré. DIALOGRESULT, mais vous pouvez créer le vôtre (si vous le souhaitez) en utilisant une propriété attachée simple:
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);
};
}
});
}
Cela vous permettra d'écrire:
<Button Content="Click Me" my:ButtonHelper.DialogResult="True" />
et obtenir un comportement équivalent à WinForms (cliquer sur le bouton provoque la fermeture de la boîte de dialogue et renvoie le résultat spécifié)
Autres conseils
Il n'y a pas Button.DialogResult
Dans WPF. Il vous suffit de définir le DialogResult
de la Window
à vrai ou faux:
private void buttonOK_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
Assurez-vous simplement que vous avez montré le formulaire en utilisant ShowDialog
plutôt que Show
. Si vous faites ce dernier, vous obtiendrez l'exception suivante soulevée:
INVALIDOPERATIONException était non gérée
DialogResult ne peut être défini qu'après la création de la fenêtre et affichée comme boîte de dialogue.
MessageBoxResult result = MessageBox.Show("","");
if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else
{
// CODE IN HERE
}