18

System.Windows でForms .Buttonプロパティ DialogResult があり、このプロパティはSystem.Windows にあります。コントロール.Button (WPF)?

4

4 に答える 4

32

組み込みの 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 と同等の動作を取得します (ボタンをクリックするとダイアログが閉じ、指定された結果が返されます)

于 2009-11-18T22:10:53.283 に答える
22

Button.DialogResultWPFにはありません。DialogResultWindowを true または falseに設定するだけです。

private void buttonOK_Click(object sender, RoutedEventArgs e)
{
    this.DialogResult = true;
}
于 2009-11-18T21:58:11.527 に答える
1

ShowDialogではなくを使用してフォームを表示したことを確認してくださいShow。後者を実行すると、次の例外が発生します。

InvalidOperationException が処理されませんでした

DialogResult は、ウィンドウが作成されてダイアログとして表示された後にのみ設定できます。

于 2009-11-18T22:07:48.077 に答える
-4
MessageBoxResult result = MessageBox.Show("","");

if (result == MessageBoxResult.Yes)
{
// CODE IN HERE
}
else 
{
// CODE IN HERE
}
于 2010-10-30T08:42:47.963 に答える