大家好,我是沙漠盡頭的狼。
今天嘗試了下wpf混合blazor開發,感覺不錯,順便把測試的程式簡單分享下:wpf混合blazor開發的一個簡易對話程式。
使用技術棧:
搭建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列表:

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

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

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

源碼
GitHub:https://github.com/dotnet9/WPFBlazorChat
效果還行,代碼就不解釋了,有興趣的跑起來看看,目前有幾點後面有時間再優化,畢竟現在快凌晨兩點了:
自定義的窗體還是wpf模式實現的
窗體透明,border滑鼠按下事件實現窗體拖動、右上角關閉窗體按鈕實現窗體關閉,後面有空再嘗試也使用razor實現吧。
prism.dryioc和iservicecollection兩個ioc容器重複註冊對象
本以为搞混合开发挺简单的,实际做才会遇到问题,如果要实现模块化,两种容器可能会处理类似的对象依赖注入,比如
IEventAggregator在Prism中是默认注入了,如果Razor中使用还要注入到IServiceCollection中。
更多點,後面再補充,今天只是嘗試...