Where is Button.DialogResult in WPF?
Asked Answered
G

4

18

In System.Windows.Forms.Button there is a property DialogResult, where is this property in the System.Windows.Controls.Button (WPF)?

Greatest answered 18/11, 2009 at 21:55 Comment(0)
V
33

There is no built-in Button.DialogResult, but you can create your own (if you like) using a simple attached property:

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

This will allow you to write:

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

and get behavior equivalent to WinForms (clicking on the button causes the dialog to close and return the specified result)

Vinery answered 18/11, 2009 at 22:10 Comment(3)
I learned new stuff in herer, this attatching, eventho im not going to use it in this case, sure will be useful! thanks a lotGreatest
I never knew about the GetWindow func, that's just amazing!Greatest
A great solution, made greater in its simplicity.Colorific
D
24

There is no Button.DialogResult in WPF. You just have to set the DialogResult of the Window to true or false :

private void buttonOK_Click(object sender, RoutedEventArgs e)
{
    this.DialogResult = true;
}
Dixie answered 18/11, 2009 at 21:58 Comment(0)
S
1

Just make sure that you've shown the form using ShowDialog rather than Show. If you do the latter you'll get the following exception raised:

InvalidOperationException was unhandled

DialogResult can be set only after Window is created and shown as dialog.

Subsolar answered 18/11, 2009 at 22:7 Comment(0)
P
-5
MessageBoxResult result = MessageBox.Show("","");

if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else 
{
// CODE IN HERE
}
Pennon answered 30/10, 2010 at 8:42 Comment(1)
This code won't even work... MessageBox.Show("", ""); will not show Yes|No buttons.Rachealrachel

© 2022 - 2024 — McMap. All rights reserved.