【问题标题】:DialogResult in RadWindow.Confirm()RadWindow.Confirm() 中的 DialogResult
【发布时间】:2014-05-09 08:46:24
【问题描述】:

我在我的 WPF 应用程序中将radwindow 用于我的自定义confirmbox。现在我需要在不触发事件的情况下获取用户单击的结果。

//代码:

    DialogParameters param = new DialogParameters();
    param.Theme = new Windows8Theme();
    param.OkButtonContent = "Save";
    param.CancelButtonContent = "Discard";
    param.Content = "Do you want to save your unsaved changes?";
    param.Header = "";

    RadWindow.Confirm(param);

有点像,

DialogResult result = MessageBox.Show("Do you want to save changes?", "Confirmation", messageBoxButtons.YesNoCancel);
if(result == DialogResult.Yes)
    //...
else if (result == DialogResult.No)
    //...
else
    //...

如何做到这一点?

【问题讨论】:

    标签: c# wpf telerik messagebox radwindow


    【解决方案1】:

    看看这是否适合你。我对 RadWindow 对象进行了子类化。

    public class MyWindow : RadWindow
    {
        #region Public Methods
    
        /// <summary>
        /// Alerts the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="width">The width.</param>
        public static void Alert(string message, int width = 400 )
        {
            var dialogParams = new DialogParameters
            {
                Content = new TextBlock()
                {
                    Text = message,
                    Width = width,
                    TextWrapping = TextWrapping.Wrap
                },            
                Owner = Application.Current.MainWindow
            };
    
            RadWindow.Alert(dialogParams);
        }
    
        /// <summary>
        /// Confirms the specified content.
        /// </summary>
        /// <param name="message">The content.</param>
        /// <param name="closed">The closed.</param>
        /// <param name="width">The width.</param>
        public static void Confirm(string message, EventHandler<WindowClosedEventArgs> closed, int width = 400)
        {
            RadWindow.Confirm(new DialogParameters
            {
                Content = new TextBlock()
                {                   
                    Text = message,
                    Width = width,                   
                    TextWrapping = TextWrapping.Wrap
                },
                Closed = closed,                  
                Owner = Application.Current.MainWindow
            });
        }
    
        #endregion Public Methods
    }
    

    那就这样打个电话吧……

                    MyWindow.Confirm(message,
                        delegate(object windowSender, WindowClosedEventArgs args)
                        {
                            if (args.DialogResult == true)
                            {
                                this.securityViewModel.UndeleteUser(fex.Detail.ExistingDeletedUserId.Value);
                            }
                        });
    

    【讨论】:

      【解决方案2】:

      RadWindow.Confirm 还接受另一个参数,它是在OnClose 中执行的处理程序

      我是这样解决的:

      bool DialogResult = false;
      public void ShowConfirmation(string Message){
          DialogParameters param = new DialogParameters();
          param.Content = message;
          param.Owner = App.Current.MainWindow;
          param.Closed += (object sender, WindowClosedEventArgs e) => {
                      DialogResult = e.DialogResult == true ? true : false;
                  }; 
      
          RadWindow.Confirm(param);
          return DialogResult
      }
      

      e.DialogResult 它是一个可为空的布尔值,我将它保存在代码中其他位置定义的变量中(在我的情况下 DialogResult,它是在调用对话框的方法之外定义的,因此我可以在方法中使用它,并且lambda 处理函数)。

      【讨论】:

        猜你喜欢
        • 2011-10-07
        • 2013-01-26
        • 2011-06-04
        • 2014-11-29
        • 2011-09-10
        • 2013-05-26
        • 2014-04-16
        • 2017-04-11
        • 1970-01-01
        相关资源
        最近更新 更多