2009-11-18 2 views

Répondre

30

Il n'y a pas Button.DialogResult intégré, mais vous pouvez créer votre propre (si vous le souhaitez) à l'aide d'une simple propriété attachée:

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 (en cliquant sur le bouton provoque la boîte de dialogue pour fermer et retourner le résultat spécifié)

+0

J'ai appris de nouvelles choses dans herer, ce attatching, eventho je ne vais pas l'utiliser dans ce cas, bien sûr sera utile! merci beaucoup – Shimmy

+0

Je n'ai jamais entendu parler de la fonction GetWindow, c'est incroyable! – Shimmy

+0

Une excellente solution, rendue plus grande dans sa simplicité. –

17

Il n'y a pas de Button.DialogResult dans WPF. Il suffit de régler la DialogResult du Window vrai ou faux:

private void buttonOK_Click(object sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
} 
+2

@Shimmy: Cela devrait être accepté réponse en fait .. – Mangesh

1

Assurez-vous que vous avez montré le formulaire en utilisant ShowDialog plutôt que Show. Si vous faites ce dernier, vous aurez l'exception suivante a soulevé:

InvalidOperationException était non gérée

DialogResult peut être réglée seulement après la fenêtre est créé et présenté comme dialogue.

-4
MessageBoxResult result = MessageBox.Show("",""); 

if (result == MessageBoxResult.Yes) 
{ 
// CODE IN HERE 
} 
else 
{ 
// CODE IN HERE 
} 
+2

'MessageBoxResult resultat = new MessageBoxResult();' Je lol'd – Will

+0

Ce code ne fonctionnera même pas ... 'MessageBox.Show (" "," ");' ne montrera pas les boutons Yes | No. – qJake