众所周知,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