【wpf】handycontrol growl 打造一个比弹窗优雅10倍的信息通知方式

前言

话不多说,先上图:
在这里插入图片描述
这种弹框不会影响主进程的脚本,同时分为四个等级:

  • 普通消息:Info (时间一到,自动消失,除非鼠标停留上面)
  • 警告: Warning (时间一到自动消失,除非鼠标停留上面)
  • 错误:Error (不会自动消失,但是可以点击关闭)
  • 致命错误:Fatal (不会自动消失,也无法关闭)

这样优雅的弹框你想要吗?

准备工作

handycontrol 这个需要安装一下,安装过程这里不说了,不会的可以去官网看看。
handycontrol官网

界面部分

growl 弹框不是以控件的方式提供,他以附加属性的方式提供,只需要给他提供一个容身之所。
这里,我用ScrollViewer + StackPanel的方式 “包容” 她。

<!--弹出区域-->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden" HorizontalAlignment="Right">
     <StackPanel hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,10"/>
</ScrollViewer>

这样及时消息很多的情况也会一直排列下去。
这里的hc: 就是handycontrol的声明:

xmlns:hc="https://handyorg.github.io/handycontrol" 

我们将这部分的代码放到主界面

后台部分

接下来,其实只需要调用HandyControl.Controls.Growl.Info("XXXX");
或者是HandyControl.Controls.Growl.Error("XXXX")就可以实现弹框了。

但是 这里借助了prism的中的事件这个工具,这样的话,不管再那里,都能发送消息让主界面显示消息。这样产生一些报警消息就非常方便了!以下停供封装好的源码。

订阅封装

public MainWindow(IEventAggregator eventAggregator)
{
    //事件订阅
    eventAggregator.GetEvent<GrowlEvent>().Subscribe((GrowMsg msg) =>{
        if (msg.enumAlarmType == EnumAlarmType.Info)
        {
            HandyControl.Controls.Growl.Info(msg.message);
        }
        else if (msg.enumAlarmType == EnumAlarmType.Info)
        {
            HandyControl.Controls.Growl.Warning(msg.message);
        }
        else if (msg.enumAlarmType == EnumAlarmType.Err)
        {
            HandyControl.Controls.Growl.Error(msg.message);
        }
        else if (msg.enumAlarmType == EnumAlarmType.Fatal)
        {
            HandyControl.Controls.Growl.Fatal(msg.message);
        }
        else
        {
            HandyControl.Controls.Growl.Info(msg.message);
        }
    });
}

发送封装

void PostGrowlEvent(string strMessage, EnumAlarmType enumat)
{
    eventAggregator.GetEvent<GrowlEvent>().Publish(new GrowMsg()
    {
        enumAlarmType = enumat,
        message = strMessage,
    });
}

以下是 ,上面用到的 枚举类型,事件类型,和消息类型。

public enum EnumAlarmType
{
    Debug = 0,
    Info,
    Err,
    Fatal,
    Warning,
}

/// <summary>
/// 一个弹窗事件
/// </summary>
public class GrowlEvent : PubSubEvent<GrowMsg>
{
}

public class GrowMsg
{
    public EnumAlarmType enumAlarmType;
    public string message;
    public string token;
}

这样再任意地方调用PostGrowlEvent,主界面就能优雅的弹窗提示框了!!

prism 部分,可以参考我的专栏,感谢支持!
《【Prism系列】Prism事件聚合器》

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是实现 WPF HandyControl MVVM 分页的步骤: 1. 添加依赖项 在项目中添加以下依赖项: - WPF HandyControl - Prism.Core - Prism.Wpf 2. 创建 ViewModel 创建一个 ViewModel,其中包含以下属性: - TotalItems:总项目数 - PageSize:每页显示的项目数 - CurrentPage:当前页码 - TotalPages:总页数 还应该有以下命令: - FirstCommand:将当前页码设置为第一页 - PreviousCommand:将当前页码减一 - NextCommand:将当前页码加一 - LastCommand:将当前页码设置为最后一页 3. 创建 View 创建一个 View,其中包含以下元素: - 一个 TextBlock,显示当前页码和总页数 - 一个 Button,用于执行 FirstCommand - 一个 Button,用于执行 PreviousCommand - 一个 Button,用于执行 NextCommand - 一个 Button,用于执行 LastCommand 4. 绑定数据 在 View 中绑定 ViewModel 的属性和命令,以便在用户与 View 交互时更新它们。 5. 实现分页逻辑 在 ViewModel 中实现分页逻辑。在 FirstCommand、PreviousCommand、NextCommand 和 LastCommand 中更新 CurrentPage 的值,并重新计算 TotalPages 的值。在 TotalItems、PageSize 和 CurrentPage 的值更改时,还应该更新 TotalPages 的值。 6. 显示分页数据 在 View 中使用 HandyControl 的 DataPager 控件来显示分页数据。将 DataPager 的 ItemsSource 属性绑定到 ViewModel 中的项目集合,并将 DataPager 的 PageSize 属性设置为 ViewModel 中的 PageSize 属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值