首页 文章详情

WPF混合Blazor做个简易聊天小程序

DotNet NB | 227 2022-11-03 19:18 0 0 0
UniSMS (合一短信)

大家好,我是沙漠尽头的狼。

今天尝试了下WPF混合Blazor开发,感觉不错,顺便把测试的程序简单分享下:WPF混合Blazor开发的一个简易对话程序。

使用技术栈:

  • .NET 7[1]
  • Prism 8[2]
  • Masa Blazor[3]

搭建WPF+Blazor程序

学习WPF + Blazor混合开发的Hello World最好的地方是微软文档:

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/hybrid/tutorials/wpf?view=aspnetcore-7.0

效果

UI使用了Masa Blazor,效果个人感觉不错,如果用WPF实现,要麻烦不少,以下是几个效果截图:

用户列表窗口

使用了Masa Blazor的列表组件,代码几乎是直接Copy过来的,参考链接Masa Blazor列表[4]

用户列表

聊天窗口

这个简单,左侧是一个列表,同上面的用户列表类似,只是去掉了上方蓝色的MToolbar和用户的详细描述信息,右侧则是多行文本框显示聊天记录、单行文本框输入即时聊天信息、一个发送按钮(简单描述,不贴代码,后面有仓库链接)。

聊天窗口

打开子窗口

列表的点击事件,使用IEventAggregator发送打开子窗体事件 OpenUserDialogEvent,事件订阅方法执行弹出子窗体操作:

打开窗口

演示发送消息

发送消息按钮点击,使用IEventAggregator 发送发送消息事件SendMessageEvent,事件订阅方法接收消息,并追加到各自历史聊天多行文本框展示:

演示发送消息

源码

Github:https://github.com/dotnet9/WPFBlazorChat

效果还行,代码就不解释了,有兴趣的跑起来看看,目前有几点后面有时间再优化,毕竟现在快凌晨两点了:

  • 自定义的窗体还是WPF模式实现的

    窗体透明,Border鼠标按下事件实现窗体拖动、右上角关闭窗体按钮实现窗体关闭,后面有空再尝试也使用Razor实现吧。

  • Prism.DryIoc和IServiceCollection两个Ioc容器重复注册对象

    本以为搞混合开发挺简单的,实际做才会遇到问题,如果要实现模块化,两种容器可能会处理类似的对象依赖注入,比如IEventAggregatorPrism中是默认注入了,如果Razor中使用还要注入到IServiceCollection中。

更多点,后面再补充,今天只是尝试...

参考资料

[1]

.NET 7: https://learn.microsoft.com/zh-cn/aspnet/core/blazor/hybrid/tutorials/wpf?view=aspnetcore-7.0

[2]

Prism 8: https://github.com/PrismLibrary/Prism

[3]

Masa Blazor: https://blazor.masastack.com/

[4]

Masa Blazor列表: https://blazor.masastack.com/components/lists

推荐阅读:
12个 C# 11 特性
使用.NET从零实现基于用户角色的访问权限控制
.NET性能优化-使用ValueStringBuilder拼接字符串
.NET周报【10月第3期 2022-10-25】
宣布 .NET MAUI 支持 .NET 7 Release Candidate 2
.NET性能系列文章一:.NET7的性能改进

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2021开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter