当我有一个父控件的 BackColor 不是 SystemColors.Control 时,但我在该父控件上有按钮,我想在系统中绘制它们。但是,当我不更改按钮的 BackColor 时,它​​会以父项的颜色绘制。当我将按钮的 BackColor 更改为 SystemColors.Control 时,它​​不再在 Windows 主题中绘制。

左侧版本带有 SystemColors.Control ,右侧版本没有更改 BackColor

炸了,是这个样子的。在这里您可以看到按钮具有纯色背景。

有什么建议可以解决这个问题吗?

图像中的效果可以通过新建一个.NET 2.0 WinForms项目,将Form1的构造函数改成如下:

public Form1()
{
    InitializeComponent();

    var textBox = new TextBox();
    Controls.Add(textBox);

    var button = new Button { Text = "L", Width = 23, Height = 18, Left = -1, Top = -1 };
    textBox.Controls.Add(button);

    // Disable the line below to get the default behavior
    button.BackColor = SystemColors.Control;
}

最佳答案

我目前只能访问 Windows 7,所以我无法在 XP 等上进行测试,但是您是否在 WinForms 应用程序的 Application.EnableVisualStyles 入口点调用 Main

在启用 Aero 的 Windows 7 上,如果调用 Application.EnableVisualStyles,按钮不会采用父颜色。

注意: 您应该设置 button.UseVisualStyleBackColor = true; 并且不要显式设置按钮的 BackColor 属性。

关于c# - 防止 Button 继承父级的 BackColor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4489663/

10-14 16:12