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