Где находится Button.DialogResult в WPF? - PullRequest
15 голосов
/ 19 ноября 2009

В System.Windows. Forms .Button есть свойство DialogResult , где это свойство в System.Windows. Controls . Кнопка (WPF)?

Ответы [ 4 ]

31 голосов
/ 19 ноября 2009

Встроенного Button.DialogResult нет, но вы можете создать свой собственный (если хотите) с помощью простого присоединенного свойства:

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

Это позволит вам написать:

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

и получить поведение, эквивалентное WinForms (при нажатии на кнопку диалоговое окно закрывается и возвращается указанный результат)

18 голосов
/ 19 ноября 2009

В WPF нет Button.DialogResult. Вам просто нужно установить DialogResult из Window в true или false:

private void buttonOK_Click(object sender, RoutedEventArgs e)
{
    this.DialogResult = true;
}
1 голос
/ 19 ноября 2009

Просто убедитесь, что вы показали форму, используя ShowDialog вместо Show. Если вы сделаете последнее, вы получите следующее исключение:

Исключение InvalidOperationException было обработано

DialogResult может быть установлен только после того, как Window создан и показан в виде диалога.

0 голосов
/ 30 октября 2010
MessageBoxResult result = MessageBox.Show("","");

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