网上查看了好多资料,没有找到很清楚明了的结果,经过了多天的研究,无意发现了这个方法来进行全局调用
效果展示:
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; } } ////// 调用消息窗口的代理事件 /// public ActionShowDialog { get; set; } /// /// 调用消息确认窗口的代理事件 /// public ActionShowYesNo { 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.")); }