学习.NET MAUI Blazor(五)、修改Window窗口标题

  • 学习.NET MAUI Blazor(五)、修改Window窗口标题已关闭评论
  • 129 次浏览
  • A+
所属分类:.NET技术
摘要

由于Blazor属于SPA(single-page application),所以页面标题需要使用PageTitle组件来实现。但是在MAUI Blazor中,Blazor所在的位置是WebView,而标题是属于window。所以在MAUI Blazor中,使用PageTitle是无效的。

由于Blazor属于SPA(single-page application),所以页面标题需要使用PageTitle组件来实现。但是在MAUI Blazor中,Blazor所在的位置是WebView,而标题是属于window。所以在MAUI Blazor中,使用PageTitle是无效的。

提示
MAUI中,除了Windows平台外,其他平台没有Title这个概念。

设置MAUI标题的几种方法!

在CreateWindow中修改

在根目录的App.xaml.cs中,添加CreateWindow重写方法。

namespace MauiBlazorApp;  public partial class App : Application { 	public App() 	{ 		InitializeComponent(); 		MainPage = new MainPage(); 	} 	protected override Window CreateWindow(IActivationState activationState) 	{         var window = base.CreateWindow(activationState);         if (DeviceInfo.Current.Platform == DevicePlatform.WinUI)         {             window.Title = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;         }          return window;      } }  

在OnLaunched中修改

之前在网上找到了修改标题的代码:

protected override void OnLaunched(LaunchActivatedEventArgs args) {     base.OnLaunched(args);     Microsoft.Maui.Essentials.Platform.OnLaunched(args);      var currentWindow = Application.Windows[0].Handler.NativeView;     IntPtr _windowHandle = WindowNative.GetWindowHandle(currentWindow);     var windowId = Win32Interop.GetWindowIdFromWindow(_windowHandle);      AppWindow appWindow = AppWindow.GetFromWindowId(windowId);     appWindow.Title = "Title!"; } 

其中Application.Windows[0].Handler.NativeView提示不正确。原来是在MAUI RC的时候,把Application.Windows[0].Handler.NativeView改为了Application.Windows[0]?.Handler?.PlatformView;
改下代码:

//var currentWindow = Application.Windows[0].Handler.NativeView; var currentWindow = Application.Windows[0].Handler?.PlatformView; 

虽然拿到了window。但appWindow.Title = "Title!";并没有起作用,调试的时候,window明明也赋值了。但就是不行。

有知道的大神可以给指点下吗?我的环境是.NET 7,MAUI Blazor应用。

在观察了CreateWindow的Window之后,发现Window继承的是IWindow,而Application.Windows拿到的是一个IReadOnlyList<IWindow>,那么还是获取第一个IWindow,转换成Window是不是就可以了呢?

找到文件:Platforms -> Windows -> App.xaml.cs,添加重写方法OnLaunched

protected override void OnLaunched(LaunchActivatedEventArgs args) {     base.OnLaunched(args); } 

定义一个window

public static Microsoft.Maui.Controls.Window window; 

OnLaunched添加代码:

protected override void OnLaunched(LaunchActivatedEventArgs args) {     base.OnLaunched(args);     window = Application.Windows[0] as Microsoft.Maui.Controls.Window;     window.Title = "Title!" } 

运行后,发现可以!
学习.NET MAUI Blazor(五)、修改Window窗口标题

动态修改标题

CreateWindow设置标题后,其他页面是无法进行修改的。如何动态的修改标题呢?办法就是在OnLaunched下功夫了。在Platforms -> Windows -> App.xaml.cs中增加一个方法:

public static void SetPageTitle(string title) => window.Title = title; 

删除OnLaunched中的window.Title = "Title!"
修改Index.razor

protected override void OnAfterRender(bool firstRender) {     if(firstRender)     {         #if WINDOWS         WinUI.App.SetPageTitle("首页 - index");         #endif     } } 

看下效果:
学习.NET MAUI Blazor(五)、修改Window窗口标题

总结

如果各位大神有更好的方法,欢迎评论区告诉我,一起共勉!

点击下方公众号卡片,关注我!一起学习,一起进步!