一个按钮【快快点我】,点击@onclick="IncrementCount"
使变量currentCount
自增,同时页面显示此变量值,相信你能看懂 。
2.6 Blazor与WPF窗体关联这是两者产生关系的关键一步 , 打开窗体MainWindow.xaml
,修改如下:
文章插图
如上代码,要点如下:
- 添加上面引入的
Nuget
包Microsoft.AspNetCore.Components.WebView.Wpf
的命名空间,命名为blazor
,主要是要使用BlazorWebView
组件; BlazorWebView
组件属性HostPage
指定承载的html文件,Services
指定razor组件的Ioc
容器 , 看下面MainWindow()
里标红的代码;RootComponent
的Selector="#app"
属性指示Razor
组件渲染的位置,看index.html
中id为app
的html元素 ,ComponentType
指示需要在#app
中渲染的Razor
组件类型 。
MainWindow.xaml.cs
,修改如下:文章插图
在WPF里可以使用Prism等框架提供的
Unity
、DryIoc
等Ioc
容器实现视图与服务的注入;Razor
组件这里,默认使用ASP.NET Core
的IServiceCollection
容器;如果WPF窗体与Razor组件需要共享数据,可以通过后面要说的Messager
发送消息 , 也可以通过Ioc
容器注入的方式实现,比如从WPF窗体中注入的数据(通过MainWindow
构造函数注入),通过IServiceCollection
容器再注入Razor
组件使用 , 这里后面也有提到 。文章插图
上面步骤做完后,运行程序:
文章插图
OK ,
WPF
与Blazor
集成成功,打完收工?等等,还没完呢,本小节源码在这WPF中添加Blazor,接着往下看 。
3. 自定义窗体
文章插图
看上图,窗体边框是WPF默认的样式 , 有时会感觉比较丑,或者不丑,设计师有其他的窗体风格设计,往往我们要自定义窗体,本节分享部分WPF与Blazor的自定义窗体实现,更多定制化功能可能需要您自行研究 。
3.1 WPF自定义窗体一般实现是设置窗体的三个属性
WindowStyle="None" AllowsTransparency="True" Background="Transparent"
,即可隐藏默认窗体的边框,然后在内容区自己画标题栏、最小化、最大化、关闭按钮、客户区等 。MainWindow.xaml:隐藏WPF默认窗体边框
<Windowx:Class="WPFBlazorChat.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Wpf;assembly=Microsoft.AspNetCore.Components.WebView.Wpf"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:razorViews="clr-namespace:WPFBlazorChat.RazorViews"Title="MainWindow"Width="800"Height="450"AllowsTransparency="True"Background="Transparent"WindowStyle="None"mc:Ignorable="d"><Grid><blazor:BlazorWebView HostPage="wwwroot\index.html" Services="{DynamicResource services}"><blazor:BlazorWebView.RootComponents><blazor:RootComponent ComponentType="{x:Type razorViews:Counter}" Selector="#app" /></blazor:BlazorWebView.RootComponents></Grid></Window>
上面的代码只是隐藏了WPF默认窗体的边框,运行程序如下:文章插图
看上图 , 点击窗体中的按钮(其实是Razor组件的按钮),但未执行按钮点击事件 , 且窗体消失了,这是怎么回事?您可以尝试研究下为什么,我没有研究个所以然来 , 暂时加个背景处理
BlazorWebView
穿透的问题 。简单的WPF自定义窗体样式
我们加上自定义窗体的基本样式看看:
文章插图
MainWindow.xaml
代码如下:<Windowx:Class="WPFBlazorChat.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Wpf;assembly=Microsoft.AspNetCore.Components.WebView.Wpf"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:razorViews="clr-namespace:WPFBlazorChat.RazorViews"Title="MainWindow"Width="800"Height="450"AllowsTransparency="True" Background="Transparent" WindowStyle="None"mc:Ignorable="d"><Window.Resources><Style TargetType="{x:Type Button}"><Setter Property="Width" Value="https://www.huyubaike.com/biancheng/35" /><Setter Property="Height" Value="https://www.huyubaike.com/biancheng/25" /><Setter Property="Margin" Value="https://www.huyubaike.com/biancheng/2" /><Setter Property="Background" Value="https://www.huyubaike.com/biancheng/Transparent" /><Setter Property="BorderThickness" Value="https://www.huyubaike.com/biancheng/0" /><Setter Property="Foreground" Value="https://www.huyubaike.com/biancheng/White" /></Style></Window.Resources><Border Background="#7160E8" CornerRadius="5"><Grid><Grid.RowDefinitions><RowDefinition Height="35" /><RowDefinition Height="*" /></Grid.RowDefinitions><BorderBackground="#7160E8" CornerRadius="5 5 0 0" MouseLeftButtonDown="MoveWindow_MouseLeftButtonDown"><Grid><TextBlockMargin="10,10,5,5"Foreground="White"Text="这里是窗体标题栏 , 左侧可放Logo、标题,右侧放窗体操作按钮:最小化、最大化、关闭等" /><StackPanel HorizontalAlignment="Right" Orientation="Horizontal"><Button Click="MinimizeWindow_Click" Content="―" /><Button Click="MaximizeWindow_Click" Content="口" /><Button Click="CloseWindow_Click" Content="X" /></StackPanel></Grid></Border><blazor:BlazorWebView Grid.Row="1" HostPage="wwwroot\index.html" Services="{DynamicResource services}"><blazor:BlazorWebView.RootComponents><blazor:RootComponent ComponentType="{x:Type razorViews:Counter}" Selector="#app" /></blazor:BlazorWebView.RootComponents></blazor:BlazorWebView></Grid></Border></Window>
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 暗区突围容器箱怎么获取
- 骁龙888和骁龙870性能对比-骁龙888和骁龙870哪个好
- 真我手表t1测评_真我手表t1测评表现
- 怎样防止别人蹭wifi(最强连网神器)
- wifi如何手机上防止别人蹭网(手机wifi已连接但不可上网)
- jvm双亲委派机制详解
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- 2022支付宝蚂蚁庄园8月19日答案
- iqoo8pro散热怎么样_iqoo8pro散热效果好吗
- 原神纸间奇旅怎么玩