【问题标题】:Where is Button.DialogResult in WPF?WPF 中的 Button.DialogResult 在哪里?
【发布时间】:2010-12-18 01:53:25
【问题描述】:

System.Windows.Forms.Button 中有一个属性DialogResult,这个属性在System.Windows.Controls.Button (WPF) 的哪里?

【问题讨论】:

    标签: wpf button dialogresult


    【解决方案1】:

    没有内置的 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 等效的行为(单击按钮会导致对话框关闭并返回指定的结果)

    【讨论】:

    • 我在这里学到了新东西,这个附件,即使我不会在这种情况下使用它,肯定会有用!非常感谢
    • 我从来不知道 GetWindow 函数,这太神奇了!
    • 一个很棒的解决方案,更简单。
    【解决方案2】:

    WPF 中没有Button.DialogResult。您只需将WindowDialogResult 设置为true 或false:

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

    【讨论】:

      【解决方案3】:

      只需确保您使用ShowDialog 而不是Show 显示表单。如果您执行后者,您将引发以下异常:

      InvalidOperationException 未处理

      DialogResult只能在Window被创建并显示为对话框后才能设置。

      【讨论】:

        【解决方案4】:
        MessageBoxResult result = MessageBox.Show("","");
        
        if (result == MessageBoxResult.Yes)
        {
        // CODE IN HERE
        }
        else 
        {
        // CODE IN HERE
        }
        

        【讨论】:

        • 此代码甚至不起作用...MessageBox.Show("", ""); 不会显示是|否按钮。
        猜你喜欢
        • 2011-05-28
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 2012-01-25
        相关资源
        最近更新 更多