Question

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

Was it helpful?

Solution

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)

OTHER TIPS

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

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.

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

if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else 
{
// CODE IN HERE
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top