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

文章介绍了如何在WPF中使用Stylet框架自定义MessageBox。Stylet提供了与系统MessageBox相似的实现,允许在ViewModel中使用而不影响测试性。用户可以定制消息框的按钮文本、按钮集、图标、声音以及流方向和文本对齐。通过实现IMessageBoxViewModel接口,开发者可以创建自己的自定义消息框实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值