学习.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>,那么还是获取第一个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
}
}
看下效果:

总结
如果各位大神有更好的方法,欢迎评论区告诉我,一起共勉!
点击下方公众号卡片,关注我!一起学习,一起进步!
学习.NET MAUI Blazor(五)、修改Window窗口标题的更多相关文章
- node-webkit学习(4)Native UI API 之window
node-webkit学习(4)Native UI API 之window 文/玄魂 目录 node-webkit学习(4)Native UI API 之window 前言 4.1 window a ...
- 我的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来
[Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...
- 别人的的MYSQL学习心得(十五) 日志
我的MYSQL学习心得(十五) 日志 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- {MySQL数据库初识}一 数据库概述 二 MySQL介绍 三 MySQL的下载安装、简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 初识sql语句
MySQL数据库初识 MySQL数据库 本节目录 一 数据库概述 二 MySQL介绍 三 MySQL的下载安装.简单应用及目录介绍 四 root用户密码设置及忘记密码的解决方案 五 修改字符集编码 六 ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- 【转】Pandas学习笔记(三)修改&添加值
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
随机推荐
- python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)
python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件) requests是一个Python第三方库,用于向URL地址发起请求 bs4 全名 BeautifulSoup4, ...
- How to get the return value of the setTimeout inner function in js All In One
How to get the return value of the setTimeout inner function in js All In One 在 js 中如何获取 setTimeout ...
- Seata 环境搭建
在使用微服务中,单体事务注解@Transactional 就不适用了,需要采用分布式事务解决方案,本文介绍分布式事务Seata的安装.Seata一款开源的分布式事务解决方案,致力于在微服务架构下提供高 ...
- 【神经网络】softmax回归
前言 softmax回归为一种分类模型. 基本原理 由于softmax回归也是一种线性叠加算法,且需要输出离散值. 很自然地想到,可以取值最大的输出为置信输出.更进一步想到,如果有三个人A.B.C分别 ...
- 云原生之旅 - 4)基础设施即代码 使用 Terraform 创建 Kubernetes
前言 上一篇文章我们已经简单的入门Terraform, 本篇介绍如何使用Terraform在GCP和AWS 创建Kubernetes 资源. Kubernetes 在云原生时代的重要性不言而喻,等于这 ...
- iOS- 最全的真机测试教程
想要上架的同学请看:<iOS-最全的App上架教程> 因为最近更新了Xcode 8 ,证书的创建都大同小异,只是在Xcode 8中的设置有一些变化,我就在下面补充,如有什么疑问,请联系 ...
- 苹果iOS App上架流程,非iOS开发人员上架教程
iOS应用上线发布流程一般包含相关证书文件的配置.Xcode的设置.App Store Connect填写App的相关信息.ipa包上传.审核结果以及相关邮件回复.相关证书文件的配置与Xcode的 ...
- Java多线程-ThreadPool线程池(三)
开完一趟车完整的过程是启动.行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速.频繁地踩刹车等动作.因为在速度切换的过程中,发送机要多做一些工作,当然就要多费一些油. 而一个Java线程 ...
- JIRA操作之 基本说明
官方说明:https://docs.atlassian.com/software/jira/docs/api/7.6.1/ 项目(Project) Project是一组问题单(Issue)的集合,每个 ...
- Go语言正/反向代理的姿势
先重温一下什么叫反向代理,正向代理. 鹅厂二面,nginx回忆录 所谓正向,反向代理取决于代理的是出站请求,还是入站请求. 正向代理: 代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近. ...