2009-11-18 8 views

Antwort

30

Es gibt keine integrierte in Button.DialogResult, aber Sie können Ihre eigenen erstellen (wenn Sie mögen) eine einfache angebracht Eigenschaft mit:

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); 
     }; 
    } 
    }); 
} 

Dies ermöglicht es Ihnen zu schreiben:

<Button Content="Click Me" my:ButtonHelper.DialogResult="True" /> 

und bekommen Verhalten entspricht WinForms (Klick auf die Schaltfläche bewirkt, um den Dialog zu schließen und das angegebene Ergebnis)

+0

Ich lernte neue Sachen in Herer, diese Attachging, Eventho im nicht zu verwenden es in diesem Fall wird sicher nützlich sein! Vielen Dank – Shimmy

+0

Ich wusste nie über die GetWindow-Funktion, das ist einfach unglaublich! – Shimmy

+0

Eine großartige Lösung, die in ihrer Einfachheit verbessert wurde. –

17

In WPF gibt es keine Button.DialogResult. Sie müssen nur die DialogResult der Window zu wahr oder falsch gesetzt:

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

@Shimmy: Dies sollte akzeptiert werden Antwort eigentlich .. – Mangesh

1

einfach sicher, dass Sie das Formular ShowDialog mit gezeigt haben, anstatt Show. Wenn Sie das letztere tun, erhalten Sie die folgende Ausnahme ausgelöst:

InvalidOperationException wurde nicht behandelt

Dialogresult nur dann gesetzt werden kann, nachdem Fenster erstellt wird und als Dialog angezeigt.

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

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

'MessageBoxResult result = new NachrichtBoxResult();' I lol'd – Will

+0

Dieser Code wird nicht einmal funktionieren ... 'MessageBox.Show (" "," ");' zeigt nicht Yes | No buttons. – qJake