学习.NET MAUI Blazor(五)、修改Window窗口标题
|
由于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,转换成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!"
- }
复制代码 运行后,发现可以!
动态修改标题
在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
- }
- }
复制代码 看下效果:
总结
如果各位大神有更好的方法,欢迎评论区告诉我,一起共勉!
点击下方公众号卡片,关注我!一起学习,一起进步!
来源:https://www.cnblogs.com/gmval/archive/2023/01/08/17034958.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-1-8 17:26:53
举报
回复
分享
|
|
|
|