我看过关于winforms Windows 10上的WinForms暗标题栏中“黑暗模式”标题栏的这篇文章
显然,您可以像这样(在WPF中)获得窗口句柄,而不是使用this.Handle。
IntPtr hWnd = new WindowInteropHelper(GetWindow(this)).EnsureHandle();所以起作用了

但我想知道我能不能用任何颜色..。
Windows 10和11有一个设置可以打开设置中的任何标题栏颜色,但我想知道我是否可以获得hWnd并自己执行每个应用程序,因为我可以将其变为黑色,为什么不使用其他颜色呢?
发布于 2022-04-01 01:10:11
的人一直想知道我是怎么弄到这个的的
把这个放在你的班级里
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
const int DWWMA_CAPTION_COLOR = 35;在什么功能(主要?)
把窗户把手拿来,或者像这样
IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle();然后定义颜色
int[] colorstr = new int[]{0xFF00FF};0x字符串的格式如下: 0xRRGGBB将字母替换为相应的值。
那就让它发生
DwmSetWindowAttribute(hWnd, DWWMA_CAPTION_COLOR, colorstr, 4);注意:这只适用于windows 11。
这是完整的版本,如果你的懒惰
class MainWindow : Window
{
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
const int DWWMA_CAPTION_COLOR = 35;
public MainWindow()
{
IntPtr hWnd = new WindowInteropHelper(this).EnsureHandle();
int[] colorstr = new int[]{0xFF00FF};
DwmSetWindowAttribute(hWnd, DWWMA_CAPTION_COLOR, colorstr, 4);
}
}哦,是的,进口这些
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;编辑:颜色采用BGR格式,所以要确保它是蓝色,绿色,红色,而不是红色,绿色蓝色。
发布于 2022-03-05 14:43:14
你可以用三种方法来解决这个问题..。
1:最困难的是,您要做的是修改由Windows.控制的非客户端区域。
缺点是,这只能通过Windows的内核方法来实现,而且您使用的是.NET,而不是C/C++。然而,有P/Invoke可供我们支配。实际上,整个Windows表单UI和控制台应用程序I/O方法都是作为包装器提供的,这些包装器在幕后进行系统调用。因此,正如MSDN中所记录的那样,完全可以使用P/Invoke来访问设置非客户端区域所需的方法。
如前所述,这是一个“比目前必要的更难”的解决办法。
2:用XAML制作自己的标题栏比较容易
幸运的是,从.NET 4.5开始,您可以使用WindowChrome类在某种程度上调整非客户端区域以满足您的需要,您可以将WindowStyle设置为none,并可以向应用程序添加一个自定义标题栏,该标题栏可以具有您喜欢的任何颜色,并且可以看起来像来自WindowStyle或其他操作系统的标题栏。
要开始学习WindowChrome,您可以访问以下文章:WindowChrome类和用WindowChrome进行实验。
代码的基础就在<Window [...]>下面
<WindowChrome.WindowChrome>
<WindowChrome
CaptionHeight="0"
ResizeBorderThickness="5" />
</WindowChrome.WindowChrome>并确保添加了WindowStyle="None"以删除标题栏及其组件。
3:最简单的一个,使用第三方库.
您还可以为WPF使用第三方组件系统(如MahApps.Metro )。据我所知,您应该能够自定义标题栏的颜色。
最终结果可以如下所示:

https://stackoverflow.com/questions/71362654
复制相似问题