大家好,我是沙漠盡頭的狼。
今天嘗試了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的列表元件,程式碼幾乎是直接複製過來的,參考連結Masa Blazor列表:

聊天視窗
這個簡單,左側是一個列表,同上面的使用者列表類似,只是去掉了上方藍色的MToolbar和使用者的詳細描述資訊,右側則是多行文字框顯示聊天記錄、單行文字框輸入即時聊天資訊、一個傳送按鈕(簡單描述,不貼程式碼,後面有倉庫連結)。

開啟子視窗
列表的點選事件,使用IEventAggregator傳送開啟子視窗事件 OpenUserDialogEvent,事件訂閱方法執行彈出子視窗操作:

示範傳送訊息
傳送訊息按鈕點選,使用IEventAggregator 傳送傳送訊息事件SendMessageEvent,事件訂閱方法接收訊息,並追加到各自歷史聊天多行文字框顯示:

原始碼
GitHub:https://github.com/dotnet9/WPFBlazorChat
效果還行,程式碼就不解釋了,有興趣的跑起來看看,目前有幾點後面有時間再優化,畢竟現在快凌晨兩點了:
自訂的視窗還是WPF模式實現的
視窗透明,Border滑鼠按下事件實現視窗拖動、右上角關閉視窗按鈕實現視窗關閉,後面有空再嘗試也使用Razor實現吧。
Prism.DryIoc和IServiceCollection兩個Ioc容器重複註冊物件
本以為搞混合開發挺簡單的,實際做才會遇到問題,如果要實現模組化,兩種容器可能會處理類似的物件依賴注入,比如
IEventAggregator在Prism中是預設注入了,如果Razor中使用還要注入到IServiceCollection中。
更多點,後面再補充,今天只是嘗試...