WPF的MVVM框架Stylet开发文档 7. 消息框MessageBox

7.MessageBox消息框

众所周知,WPF 带有自己的 MessageBox 实现 - System.Windows.MessageBox. 这很好,除了你不能从你的 ViewModel 调用它(好吧,你可以,但它使你的 ViewModel 不可测试)。在线建议的通常解决方法是“自己编写”。

嗯,Stylet 带有它自己的 MessageBox 克隆,它的外观和行为几乎与 WPF 相同(包括外观、按钮、图标、自动调整大小、声音、对齐等)。

用法

要使用,只需ShowMessageBox在 上调用方法IWindowManager,如下所示:

public MyViewModel
{
   private readonly IWindowManager windowManager;
 
   public MyViewModel(IWindowManager windowManager)
   {
      this.windowManager = windowManager;
   }
 
   public void ShowMessagebox()
   {
      var result = this.windowManager.ShowMessageBox("Hello");
   }
}

MessageBox 接受与 WPF MessageBox 相同的所有选项,以及更多选项。

自定义消息框

Stylet 的 MessageBox 实现为 ViewModelMessageBoxViewModel及其对应的 View MessageBoxView。ViewModel 实现接口 ,IMessageBoxViewModel并且该ShowMessageBox()方法使用此接口检索 ViewModel 的实例。

因此,您可以通过编写实现 的 ViewModelMessageBoxViewModel并将其注册到您的 IoC 容器来提供您自己的自定义实现。然后将由.MessageBoxView``IMessageBoxViewModel``ShowMessageBox()

如果您只想调整现有 的行为MessageBoxViewModel,您可以。以下选项可用:

自定义按钮文本

您可以通过修改 为每个应用程序编辑任何按钮的按钮文本MessageBoxViewModel.ButtonLabels,这是一个字典,其中包含要为每个按钮显示的文本。如果您只想编辑特定 MessageBox 的文本,ShowMessageBox将接受允许您这样做的字典:

MessageBoxViewModel.ButtonLabels[MessageBoxResult.No] = "No, thanks";
 
this.windowManager.ShowMessageBox("Do you want breakfast?", 
                                   buttons: MessageBoxButton.YesNo, 
                                   buttonLabels: new Dictionary<MessageBoxResult, string>()
        {
            { MessageBoxResult.Yes, "Yes please!" },
        });
 //将显示一个带有“Yes please!”按钮的消息框 和“No, thanks”

自定义按钮集

字典MessageBoxViewModel.ButtonToResults指定为每个枚举值显示哪些按钮MessageBoxButton。想要同时显示“OK”、“Yes”和“No”按钮吗?摆弄这本词典。

自定义图标

字典MessageBoxViewModel.IconMapping指定 while icon 显示哪个MessageBoxImage值。该字典必须包含每个值的条目MessageBoxImage(请注意,不同的枚举条目在此处具有相同的值),但值可能为空,在这种情况下不显示图标。

自定义声音

MessageBoxViewModel.SoundMapping是一个字典,其中包含应该为每个播放的声音 MessageBoxImage。与 一样IconMapping,枚举中的每个值都必须存在一个条目MessageBoxImage,但 null 是一个有效值(在这种情况下不会播放声音)。

自定义 流动方向和 文本对齐

有一些参数IWindowManager.ShowMessageBox()允许您指定FlowDirection(元素流动方向,从左到右,从右到左等)和TextAlignment。如果您不指定这些,则使用默认值MessageBoxViewModel.FlowDirection和。MessageBoxViewModel.TextAlignment如果愿意,您也可以更改这些默认值。

项目原地址:https://github.com/canton7/Stylet
当前文档原地址:https://github.com/canton7/Stylet/wiki/MessageBox

上一篇:WPF的MVVM框架Stylet开发文档 6. 窗口管理器 WindowManager
下一篇:WPF的MVVM框架Stylet开发文档 8. 事件聚合器The EventAggregator

你可能感兴趣的:(MVVM,Stylet框架,wpf,c#,开发语言)