Ejemplo n.º 1
0
        //特色
        public static MessageBoxResult Show(Window owner, string messageBoxText, string caption, IList <MessageBoxButtonInfo> ctrlButtons)
        {
            var mbox = new MessageBoxModule();

            mbox.Message = messageBoxText;
            mbox.Title   = caption;
            mbox.Owner   = owner;

            IsUseCustomInfoDefine(ref mbox); // 同上,检测是否使用自定义主题颜色的配置.

            if (owner != null)
            {
                mbox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            }

            if (null != ctrlButtons && ctrlButtons.Count > 0)
            {
                foreach (var btnInfo in ctrlButtons)
                {
                    switch (btnInfo.Result)
                    {
                    case MessageBoxResult.Cancel:
                    case MessageBoxResult.No:
                    {
                        var btn = CreateCtrlButton_ResultFalse(mbox, btnInfo.ContentText);
                        btn.Command = new MyCommand(btnInfo.Action);          // 为按钮关联响应动作. 这里我把Action封装为了命令.MessageBoxCommand为自定义的命令.
                        mbox.CtrlButtonCollection.Add(btn);
                    }
                    break;

                    case MessageBoxResult.None:
                    {
                        var btn = CreateCtrlButton_ResultNull(mbox, btnInfo.ContentText);
                        btn.Command = new MyCommand(btnInfo.Action);
                        mbox.CtrlButtonCollection.Add(btn);
                    }
                    break;

                    case MessageBoxResult.OK:
                    case MessageBoxResult.Yes:
                    default:
                    {
                        var btn = CreateCtrlButton_ResultTrue(mbox, btnInfo.ContentText);
                        btn.Command = new MyCommand(btnInfo.Action);
                        mbox.CtrlButtonCollection.Add(btn);
                    }
                    break;
                    }
                }

                var result = mbox.ShowDialog(); //同上一个Show方法.这里调用会显示一个模态窗口.
                return(MessageBoxResult.None);  //为啥我说MessageBoxButtonInfo类中的Result没用了,因为这里我始终返回None了.返回结果的目的是为了根据不同的结果做不同的处理,而这里的Action已经对其作出了响应.所以返回结果的用处不大.
            }
            else
            {
                return(Show(owner, messageBoxText, caption, MessageBoxButton.OK));
            }
        }
Ejemplo n.º 2
0
        public static MessageBoxResult Show(Window owner, string messageBoxText, string caption, MessageBoxButton button)
        {
            var mbox = new MessageBoxModule();

            mbox.Message = messageBoxText;
            mbox.Title   = caption;
            mbox.Owner   = owner;
            // 这个方法是检测本次弹出的消息框是否使用了自定义的颜色配置,而不是使用默认提供的颜色配置.后面再说,这里无视.
            IsUseCustomInfoDefine(ref mbox);

            if (owner != null)
            {
                mbox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            }

            //这里的分支语句提供了传入MessageBoxButton枚举的具体响应实现. 其中CreateCtrlButton_ResultTrue,CreateCtrlButton_ResultFalse
            // 等方法是创建一个按钮 并默认了按钮的响应 和Show方法完成后返回的结果. // 后面在看.

            switch (button)
            {
            case MessageBoxButton.OKCancel:

                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultTrue(mbox, "确定"));

                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultFalse(mbox, "取消"));
                break;

            //break;
            case MessageBoxButton.YesNo:
                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultTrue(mbox, "是"));

                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultFalse(mbox, "否"));

                break;

            case MessageBoxButton.YesNoCancel:
                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultTrue(mbox, "是"));

                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultFalse(mbox, "否"));

                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultFalse(mbox, "取消"));
                break;

            case MessageBoxButton.OK:
            default:
                mbox.CtrlButtonCollection.Add(CreateCtrlButton_ResultTrue(mbox, "确定"));
                break;
            }
            var result = mbox.ShowDialog();  // 本行代码是消息框弹出的核心.ShowDialog方法会打开一个模态对话框.等待返回结果.这里的结果不是MessageBoxResult枚举而是可空类型的布尔值(bool?) true对应着MessageBoxResult.Yes ,MessageBoxResult.OK的值.false对应着MessageBoxResult.Cancel,MessageBoxResult.No 的值.

            // 了解这些我们就可以对ShowDialog方法返回值做MessageBoxResult转换了.

            switch (button)
            {
            //break;
            case MessageBoxButton.OKCancel:
            {
                mbox.CtrlButtonCollection.Clear();
                return(result == true ? MessageBoxResult.OK
                            : result == false ? MessageBoxResult.Cancel :
                       MessageBoxResult.None);
            }

            //break;
            case MessageBoxButton.YesNo:
            {
                mbox.CtrlButtonCollection.Clear();
                return(result == true ? MessageBoxResult.Yes : MessageBoxResult.No);
            }

            //break;
            case MessageBoxButton.YesNoCancel:
            {
                mbox.CtrlButtonCollection.Clear();
                return(result == true ? MessageBoxResult.Yes
                            : result == false ? MessageBoxResult.No :
                       MessageBoxResult.Cancel);
            }

            case MessageBoxButton.OK:
            default:
            {
                mbox.CtrlButtonCollection.Clear();
                return(result == true ? MessageBoxResult.OK : MessageBoxResult.None);
            }
            }
        }