寫(xiě)在前面
如果你現(xiàn)在開(kāi)始學(xué)習(xí)并使用MAUI開(kāi)發(fā)桌面端,那么接下來(lái)的問(wèn)題相信你都會(huì)遇到并且會(huì)想著嘗試找方法解決它
問(wèn)題
本人在使用目前VS2022最新版17.4Professional版創(chuàng)建新的MAUI APP 基于.NET6.0項(xiàng)目時(shí),發(fā)現(xiàn)完全找不到根wpf一樣的WindowStyle或者ResizeMode這樣的屬性,有點(diǎn)強(qiáng)迫癥,一定要把這個(gè)標(biāo)題欄去掉,想著應(yīng)該不難,但是資料太少了,文檔寫(xiě)的也很亂根本無(wú)法對(duì)應(yīng)到這個(gè),找著找著,加到了站長(zhǎng),在他耐心的幫忙下,我解決了這個(gè)問(wèn)題,所以特別感謝Donet9站長(zhǎng)風(fēng)中一匹狼!
maui自帶的windows下的窗口是這樣的(完全不在我審美上)
解決方法
一開(kāi)始,我是根據(jù)站長(zhǎng)網(wǎng)站里提供的方法
鏈接: Maui學(xué)習(xí)之路(1)-Windows窗體設(shè)置.
雖然能正常根據(jù)里面操作了,但是我操作的時(shí)候可能是我操作的問(wèn)題,老師實(shí)現(xiàn)不了,只把標(biāo)題欄根下面的content融在一起,標(biāo)題欄還是在那,而且我不好改顏色
加了站長(zhǎng)微信,站長(zhǎng)耐心的幫我找了大佬Chister.Wu的Demo,對(duì)照他的Demo終于是把這個(gè)問(wèn)題解決了,現(xiàn)在總結(jié)下針對(duì)去掉原本標(biāo)題欄
1.完美去掉標(biāo)題欄,下面是代碼,寫(xiě)在MauiProgram.cs里配置生命周期方法,具體的資料在上面的鏈接: Maui學(xué)習(xí)之路(1)-Windows窗體設(shè)置.里也有,但是看起來(lái)比較麻煩,直接看代碼可能好理解一點(diǎn)
var builder = MauiApp.CreateBuilder();
builder.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.ConfigureLifecycleEvents(events =>
{
#if WINDOWS
events.AddWindows(windows => windows
.OnWindowCreated(window =>
{
//window.SizeChanged += OnSizeChanged;
MauiWinUIWindow mauiwin = window as MauiWinUIWindow;
if (mauiwin == null) { return; }
//關(guān)閉擴(kuò)展內(nèi)容
mauiwin.ExtendsContentIntoTitleBar = false;
mauiwin.Title = "Hello Maui";
通過(guò)maui窗口句柄獲取appwindow---
///這里有個(gè)操蛋的東西我用最新版新建的工程沒(méi)法直接getappwindow所以用了文章里的方法
var wndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(mauiwin.WindowHandle);
Microsoft.UI.Windowing.AppWindow appwin = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(wndId);
//對(duì)于OverlappedPresenter的解釋文檔在這個(gè)網(wǎng)址
//https://learn.microsoft.com/zh-tw/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.overlappedpresenter?view=windows-app-sdk-1.2
//大致就是OverlappedPresenter會(huì)設(shè)置這個(gè)窗口,這個(gè)窗口可以和其他窗口重疊,并對(duì)窗口標(biāo)題欄 狀態(tài)欄 工作欄進(jìn)行設(shè)置,以及其他一些調(diào)整窗口的操作
var customOverlappedPresenter = Microsoft.UI.Windowing.OverlappedPresenter.CreateForContextMenu();
appwin.SetPresenter(customOverlappedPresenter);
}));
#endif
});
return builder.Build();
原理就是重寫(xiě)創(chuàng)建窗口的方法,在這里重寫(xiě)有個(gè)好處,窗口加載之后會(huì)刷新,我在Mainpage.CS下寫(xiě)Loaded的方法的話雖然標(biāo)題欄的按鈕去掉了,但是標(biāo)題欄那塊并沒(méi)有去掉,把站長(zhǎng)的文章和Demo給的結(jié)合起來(lái)才實(shí)現(xiàn)了這樣
效果圖,完美去掉了:
2.直接在MainPage里寫(xiě)Loaded方法,這也是一開(kāi)始我用的方法,代碼如下:
不足之處就是她會(huì)有一個(gè)類似WPF的captionheight標(biāo)題欄那樣的東西,視圖沒(méi)完全刷新
private void ContentPage_Loaded(object sender, EventArgs e)
{
#if WINDOWS
var winuiWindow = Window.Handler?.PlatformView as Microsoft.UI.Xaml.Window;
MauiWinUIWindow maui = winuiWindow as MauiWinUIWindow;
winuiWindow.ExtendsContentIntoTitleBar = false;
if (winuiWindow is null)
return;
var wndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(maui.WindowHandle);
Microsoft.UI.Windowing.AppWindow appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(wndId);
//var appWindow = maui.GetAppWindow();
if (appWindow is null)
return;
var customOverlappedPresenter = Microsoft.UI.Windowing.OverlappedPresenter.CreateForContextMenu();
appWindow.SetPresenter(customOverlappedPresenter);
#endif
}
以上就是去標(biāo)題欄的方法,想要代碼的可以去gitee上自己下載,鏈接: maui-title-handle-demo.
另外對(duì)于后續(xù)窗口的大小調(diào)整,自定義放大縮小按鈕可以參考MauiDemo.,注意一定要看清自己的項(xiàng)目配置
參考文章:
Maui學(xué)習(xí)之路(1)-Windows窗體設(shè)置.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-663913.html
參考Demo
MauiDemo.文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-663913.html
到了這里,關(guān)于MAUI桌面端標(biāo)題欄設(shè)置和窗口調(diào)整的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!