如何在 Visual Studio 设计器中启用表单的视觉样式?

How to enable Visual Style of the Form in Visual Studio Designer?

我正在使用 Visual Studio 2019。Designer 中的表单外观看起来比 运行 应用程序中的要旧。

是否有意如此,是否可以在设计器中更改外观?

我建议您使用 Ui 组件,例如 GunaUI 或 DevComponent。那么你的表格会更好看。 我不知道您是不是说“Designer 中的表单外观看起来比 运行 应用程序中的外观更旧”是不是这个意思 但最好还是使用组件。

您无法更改它。这是一个 Windows 功能(错误),而不是 VS 或 .NET 功能(错误)。

设计器中托管的表单不是 top-level 表单,因此 top-level Window 主题不适用于它。它可能是 Windows 中的错误,也可能是设计使然,但它与 Visual Studio、Windows Forms .NET 或您的主题设置没有任何关系。

例如,即使您使用 SetParent 并将记事本 window 设置为另一个记事本 window 的 child,您也会在呈现标题栏时看到类似的行为。在这个例子中,VS 与渲染记事本标题栏无关,它只是 OS:

以上示例由以下代码创建:

[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
    int X, int Y, int cx, int cy, int uFlags);

[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter,
string lpszClass, string lpszWindow);

private void button1_Click(object sender, EventArgs e)
{
    var parent = Process.Start("notepad.exe");
    parent.WaitForInputIdle();

    var edit = FindWindowEx(parent.MainWindowHandle, IntPtr.Zero, "Edit", null);
    SetWindowPos(edit, IntPtr.Zero, 0, 0, 0, 0, 0x0080);

    var child = Process.Start("notepad.exe");
    child.WaitForInputIdle();
    SetParent(child.MainWindowHandle, parent.MainWindowHandle);

    SetWindowPos(child.MainWindowHandle, IntPtr.Zero, 30, 30, 300, 200, 0x0000);
}