通過一個簡單示例來進行對比, Vue的ElementUI組件的行內編輯: Blazor的AntDesginBlazor組件的行內編輯: 區別: el-table-column的label屬性相當於Column的Title屬性,這個是沒有區別的 多了一個scope="scope",在ElementUI ...
由於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
}
}
看下效果:
總結
如果各位大神有更好的方法,歡迎評論區告訴我,一起共勉!
點擊下方公眾號卡片,關註我!一起學習,一起進步!