1

我在这篇文章中查看了有关 在 Windows 10 上的 winforms WinForms 深色标题栏中获取“深色模式”标题栏的文章

很明显,您可以获得这样的窗口句柄(在 WPF 中)而不是使用 this.Handle

IntPtr hWnd = new WindowInteropHelper(GetWindow(this)).EnsureHandle();

所以它有效

点击这里查看图片(我还没有代表)

但我想知道我是否可以用任何颜色做到这一点..

Windows 10 和 11 有一个设置可以在设置中打开任何标题栏颜色,但我想知道我是否可以获取 hWnd 并自己为每个应用程序执行此操作,因为我可以将其变为黑色,为什么不能使用任何其他颜色?

4

1 回答 1

0

你可以采取三种方法来解决这个问题......

1:难的是,你要做的是修改由Windows控制的非客户区。

缺点是这只能通过 Windows 的内核方法实现,而且您使用的是 .NET,而不是 C/C++。但是,P/Invoke我们可以使用。实际上,整个 Windows 窗体 UI 和控制台应用程序 I/O 方法都是作为在后台进行系统调用的包装器提供的。因此,如 MSDN 中所述,完全可以使用P/Invoke来访问设置非客户区所需的那些方法。

如前所述,这是一个“比当前需要的更难”的解决方案。


2:更简单的一种,用 XAML 制作自己的标题栏

幸运的是,从 .NET 4.5 开始,您可以使用WindowChrome该类在一定程度上根据您的需要调整非客户区,您可以将其设置WindowStyle为无,并且可以为您的应用程序添加一个自定义标题栏,该标题栏可以具有您喜欢的任何颜色,并且可能看起来像 Windows 或其他操作系统的标题栏

要开始使用,WindowChrome您可以转到以下文章WindowChrome 类WindowChrome 实验

你的代码的基础就在下面<Window [...]>

<WindowChrome.WindowChrome>
        <WindowChrome 
        CaptionHeight="0"
        ResizeBorderThickness="5" />
    </WindowChrome.WindowChrome>

并确保添加WindowStyle="None"以删除标题栏及其组件


3:最简单的一种,使用第三方库。

您还可以使用第三方组件系统,例如用于 WPF 的MahApps.Metro 。据我所知,您应该能够自定义标题栏颜色。

最终结果可能如下所示:

MahApps.Metro

于 2022-03-05T14:43:14.763 回答