运行效果如下:
文章插图
是不是有那味儿了?再尝试把Tab移到标题栏,前面有提过的效果:
文章插图
上面的效果 , 代码修改如下,删除了_原题为栏代码,将窗体操作按钮放到了
MToolbar
里面 , 并使用MToolbar
添加了双击事件、鼠标按下、释放事件实现窗体拖动:<MApp><!--新增的Masa.Blazor Tab案例代码开始--><MCard><MToolbar Color="cyan" Dark Flat @ondblclick="WindowService.Maximize" @onmouseup="WindowService.StopMove" @onmousedown="WindowService.StartMove"><MTabs @bind-Value="https://www.huyubaike.com/biancheng/tab"AlignWithTitleSliderColor="yellow">@foreach (var item in items){<MTab Value="https://www.huyubaike.com/biancheng/item">@item</MTab>}</MTabs><div style="flex-grow: 1"></div><button class="titlebar-btn" onclick="alert('js alert: settings pressed');"><img src="https://www.huyubaike.com/biancheng/svg/settings.svg"/></button><button class="titlebar-btn" @onclick="WindowService.Minimize"><img src="https://www.huyubaike.com/biancheng/svg/minimize.svg"/></button><button class="titlebar-btn" @onclick="WindowService.Maximize">@if (WindowService.IsMaximized()){<img src="https://www.huyubaike.com/biancheng/svg/restore.svg"/>}else{<img src="https://www.huyubaike.com/biancheng/svg/maximize.svg"/>}</button><button class="titlebar-cbtn" @onclick="() => WindowService.Close(false)"><img src="https://www.huyubaike.com/biancheng/svg/dismiss.svg"/></button></MToolbar><MTabsItems @bind-Value="https://www.huyubaike.com/biancheng/tab">@foreach (var item in items){<MTabItem Value="https://www.huyubaike.com/biancheng/item"><MCard Flat><MCardText>@text</MCardText></MCard></MTabItem>}</MTabsItems></MCard><!--新增的Masa.Blazor Tab案例代码结束--></MApp>
窗体操作按钮的背景色也做部分修改:文章插图
其实上面的窗体效果还是有点瑕疵,注意到窗体右侧的竖直滚动条了吗?在没引入
Masa.Blazor
之前,右侧正常显示,引入后多了一个竖直滚动条:文章插图
这个想去掉也简单,在
wwwroot\css\app.css
追加样式(当时也是折腾了好一会儿,最后在Masa.Blazor
群里群友给出了解决方案 , 十分感谢):文章插图
问题解决
css
代码:::-webkit-scrollbar {width: 0px;}
因为Razor
组件是在BlazorWebView
里渲染的,即BlazorWebView
就是个小型的浏览器呀,上面的样式即把浏览器的滚动条宽度设置为0,它不就没有了吗?现在效果如下,是不是舒服了?文章插图
添加Masa.Blazor就介绍到这里,本小节示例代码在这里WPF中使用Masa.Blazor,下面讲解WPF与Blazor混合开发后多窗体消息通知问题 。
5. 多窗体消息通知一般
C/S
窗体之间通信使用委托、事件,而在WPF
开发中,可以使用一些框架提供的抽象事件订阅\发布
组件,比如Prism
的事件聚集器IEventAggregator
, 或MvvmLight
的Messager
。在B/S
开发中 , 进程内事件通知可能就使用MediatR
组件居多了 , 不论是在C/S
还是B/S
开发 , 这些组件在一定程度上,各大程序模板可以通用的,更不用说分布式的消息队列RabbitMQ
和 Kafka
是万能的进程间通信标准选择了 。上面是一些套话,站长根据
Prism
的事件聚集器和MvvmLight
的Messager源码阅读,简单封装了一个Messager
,可以适用于一般的业务需求 。5.1 Messager封装本来不想贴代码直接给源码链接的 , 想想代码也不多 , 直接上吧 。
Message
消息抽象类,用于定义消息类型,具体的消息需要继承该类,比如后面的打开子窗体消息
OpenSecondViewMessage
。using System;namespace WPFBlazorChat.Messages;public abstract class Message{protected Message(object sender){this.Sender = sender ?? throw new ArgumentNullException(nameof(sender));}public object Sender { get; }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 暗区突围容器箱怎么获取
- 骁龙888和骁龙870性能对比-骁龙888和骁龙870哪个好
- 真我手表t1测评_真我手表t1测评表现
- 怎样防止别人蹭wifi(最强连网神器)
- wifi如何手机上防止别人蹭网(手机wifi已连接但不可上网)
- jvm双亲委派机制详解
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- 2022支付宝蚂蚁庄园8月19日答案
- iqoo8pro散热怎么样_iqoo8pro散热效果好吗
- 原神纸间奇旅怎么玩