请问,MAUI windows 可以完美隐藏标题栏吗?不修改应用生命周期的情况下完成
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; }
//关闭扩展内容
mauiwin.ExtendsContentIntoTitleBar = false;
mauiwin.Title = "Hello Maui";
通过maui窗口句柄获取appwindow---
///这里有个操蛋的东西我用最新版新建的工程没法直接getappwindow所以用了文章里的方法
var wndId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(mauiwin.WindowHandle);
Microsoft.UI.Windowing.AppWindow appwin = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(wndId);
//对于OverlappedPresenter的解释文档在这个网址
//https://learn.microsoft.com/zh-tw/windows/windows-app-sdk/api/winrt/microsoft.ui.windowing.overlappedpresenter?view=windows-app-sdk-1.2
//大致就是OverlappedPresenter会设置这个窗口,这个窗口可以和其他窗口重叠,并对窗口标题栏 状态栏 工作栏进行设置,以及其他一些调整窗口的操作
var customOverlappedPresenter = Microsoft.UI.Windowing.OverlappedPresenter.CreateForContextMenu();
appwin.SetPresenter(customOverlappedPresenter);
}));
#endif
});
return builder.Build();
https://blog.csdn.net/Sir_aligaduo/article/details/128880940
引用chatGPT作答,MAUI(Multi-platform App UI)是一个用于跨平台应用程序开发的框架,它基于 .NET 和 C# 编程语言,旨在为多种操作系统提供一致的用户界面和功能。MAUI 框架本身不提供隐藏标题栏的功能,这是由操作系统提供的窗口管理器来处理的。因此,MAUI 应用程序无法直接控制窗口的外观和行为。
在 Windows 系统中,可以通过设置窗口样式(Window Style)来隐藏标题栏。但是,这需要在应用程序的生命周期中进行相应的处理。如果你不想修改应用程序生命周期的情况下实现隐藏标题栏,可以考虑使用第三方库或框架来实现这个功能。
有一些第三方库和框架可以帮助你在 MAUI 应用程序中隐藏标题栏,例如 Avalonia UI 和 Uno Platform。这些库和框架提供了跨平台的窗口管理器,可以让你在 MAUI 应用程序中自由控制窗口的外观和行为,包括隐藏标题栏。你可以在这些库和框架的文档中查找更多信息,并决定是否使用它们来满足你的需求。
以下是一个在 Windows 上使用 Avalonia UI 库实现隐藏标题栏的示例代码:
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
public class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 设置窗口样式为 WS_POPUP,隐藏标题栏和边框
this.WindowStyle = WindowStyle.None;
this.ExtendClientAreaToDecorationsHint = true;
this.TransparencyLevelHint = WindowTransparencyLevel.AcrylicBlur;
this.Background = new SolidColorBrush(Colors.Transparent);
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
在上面的代码中,我们创建了一个名为 MainWindow 的窗口,并在构造函数中设置了窗口的样式,从而隐藏了标题栏和边框。具体来说,我们将 WindowStyle 属性设置为 WindowStyle.None,这将窗口样式设置为无边框窗口;然后设置 ExtendClientAreaToDecorationsHint 属性为 true,以确保客户区填满整个窗口;最后设置 TransparencyLevelHint 属性为 WindowTransparencyLevel.AcrylicBlur,以实现模糊效果,并将窗口背景设置为透明。这样,我们就成功地隐藏了窗口的标题栏和边框。