MahApps.Metro怎么调用消息窗口

简介: 网上查看了好多资料,没有找到很清楚明了的结果,经过了多天的研究,无意发现了这个方法来进行全局调用 效果展示: 1.主窗口代码 public partial class MainWindow : MetroWindow { public MainWindo...

网上查看了好多资料,没有找到很清楚明了的结果,经过了多天的研究,无意发现了这个方法来进行全局调用

效果展示:

1.主窗口代码

  public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
 
            MessageExt.Instance.ShowDialog = ShowDialog;            MessageExt.Instance.ShowYesNo = ShowYesNo;
        }
        public async void ShowDialog(string message, string title)
        {
            var mySettings = new MetroDialogSettings()
            {
                AffirmativeButtonText = "关闭",
                ColorScheme = MetroDialogColorScheme.Theme
            };
            MessageDialogResult result = await this.ShowMessageAsync(title, message, MessageDialogStyle.Affirmative, mySettings);
        }
        public async void ShowYesNo(string message, string title,Action action)        
{
       var mySettings = new MetroDialogSettings()
{
AffirmativeButtonText = "确定",
NegativeButtonText = "取消",
ColorScheme = MetroDialogColorScheme.Theme
};
MessageDialogResult result = await this.ShowMessageAsync(title, message, MessageDialogStyle.AffirmativeAndNegative, mySettings); if (result == MessageDialogResult.Affirmative)
await Task.Factory.StartNew(action);
} }

 

2.单例类代码

    public sealed class MessageExt
    {
        private static readonly MessageExt instance = new MessageExt();
        private MessageExt()
        {
        }

        public static MessageExt Instance
        {
            get
            {
                return instance;
            }
        } 
        /// <summary>
        /// 调用消息窗口的代理事件
        /// </summary>
        public Action<string, string> ShowDialog { get; set; }
        /// <summary>
        /// 调用消息确认窗口的代理事件
        /// </summary>
        public Action<string, string, Action> ShowYesNo { get; set; }
    }

 

3.调用方法:

     MessageExt.Instance.ShowDialog("查询", "提示");

     MessageExt.Instance.ShowYesNo("查询", "提示", new Action(() => {
            MessageBox.Show("我来了");
     }));

 

其他请自行实现。

 

官方调用消息窗口的demo代码

 private async void ShowMessageDialog(object sender, RoutedEventArgs e)
        {
            // This demo runs on .Net 4.0, but we're using the Microsoft.Bcl.Async package so we have async/await support
            // The package is only used by the demo and not a dependency of the library!
            MetroDialogOptions.ColorScheme = UseAccentForDialogsMenuItem.IsChecked ? MetroDialogColorScheme.Accented : MetroDialogColorScheme.Theme;

            var mySettings = new MetroDialogSettings()
            {
                AffirmativeButtonText = "Hi",  //确定
                NegativeButtonText = "Go away!", //否
                FirstAuxiliaryButtonText = "Cancel",
//第一个自定义按钮, SecondAuxiliaryButtonText为第二个自定义按钮 ColorScheme
= UseAccentForDialogsMenuItem.IsChecked ? MetroDialogColorScheme.Accented : MetroDialogColorScheme.Theme }; MessageDialogResult result = await this.ShowMessageAsync("Hello!", "Welcome to the world of metro!", MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary, mySettings); if (result != MessageDialogResult.FirstAuxiliary) //这里编写点击后的代码 await this.ShowMessageAsync("Result", "You said: " + (result == MessageDialogResult.Affirmative ? mySettings.AffirmativeButtonText : mySettings.NegativeButtonText + Environment.NewLine + Environment.NewLine + "This dialog will follow the Use Accent setting.")); } private async void ShowLimitedMessageDialog(object sender, RoutedEventArgs e) { var mySettings = new MetroDialogSettings() { AffirmativeButtonText = "Hi", NegativeButtonText = "Go away!", FirstAuxiliaryButtonText = "Cancel", MaximumBodyHeight = 100, ColorScheme = UseAccentForDialogsMenuItem.IsChecked ? MetroDialogColorScheme.Accented : MetroDialogColorScheme.Theme }; MessageDialogResult result = await this.ShowMessageAsync("Hello!", "Welcome to the world of metro!" + string.Join(Environment.NewLine, "abc","def","ghi", "jkl","mno","pqr","stu","vwx","yz"), MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary, mySettings); if (result != MessageDialogResult.FirstAuxiliary) await this.ShowMessageAsync("Result", "You said: " + (result == MessageDialogResult.Affirmative ? mySettings.AffirmativeButtonText : mySettings.NegativeButtonText + Environment.NewLine + Environment.NewLine + "This dialog will follow the Use Accent setting.")); }

 

相关文章
|
消息中间件 安全 API
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
SendMessage/PostMessage API 可以实现发送系统消息,这些消息可以定义为常见的鼠标或键盘事件、数据的发送等各种系统操作......
5774 1
C#实现操作Windows窗口句柄:SendMessage/PostMessage发送系统消息、事件和数据【窗口句柄总结之二】
|
API C# 数据安全/隐私保护
ApeForms | C# WinForm 界面弹出消息通知栏 (仿Win10系统通知栏)
消息通知栏(Notification)在桌面开发中有非常重要的作用,它是一种全局的、强制的交互方式。它可以在活动窗体之外的区域向用户发出醒目的消息提示,允许用户在指引下通过简易的操作完成交互。ApeForms中提供的消息通知栏是在系统通知栏之外单独实现的一套通知功能,开发者可以自定义通知栏的内容、添加自定义的选项并设置动作回调、设置消失时间等。
898 0
ApeForms | C# WinForm 界面弹出消息通知栏 (仿Win10系统通知栏)
|
Windows
Windows程序设计——窗口键盘消息滚动事件
Windows程序设计——窗口键盘消息滚动事件
282 0
|
安全 C#
WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
原文:WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
1043 0
|
消息中间件 C#
WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口
原文:WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/powertoolsteam/article/details/6109036 ...
1069 0
|
C# C++
wpf C# 操作DirectUI窗口 SendMessage+MSAA
原文:wpf C# 操作DirectUI窗口 SendMessage+MSAA 最近做一个抓取qq用户资料的工具,需要获取qq窗口上的消息,以前这种任务是用句柄获取窗口中的信息,现在qq的窗口用的是DirectUI,只有窗口句柄,没有控件句柄,句柄这条路走不通了。
2266 0
|
内存技术 容器
Win32编程点滴5 - 响应ActiveX控件的事件
在最近的一篇文章中说到了,如何创建ActiveX,这次我们来响应事件。这次,我们将创建一个类:CGeneralEventSink,它能够响应任何Dispatch事件(事件的接口继承与IDispatch)。
1026 0