如何使控件看起来像启用了视觉样式的组合框?

我有一个模拟组合框的控件。我想呈现控件,以便控件 border 看起来像标准的 Windows组合框。具体来说,我遵循MSDN文档,并且控件的所有呈现都是正确的,除了禁用控件时的呈现。

要明确,这是针对启用了视觉样式的系统。此外,控件的所有部分都呈现正确,除了禁用的控件周围的边框与禁用的组合框边框颜色不匹配。

我正在使用 VisualStyleRenderer 类。 MSDN建议为组合框控件的文本框部分使用 VisualStyleElement.TextBox 元素,但标准禁用的文本框和标准禁用组合框的绘制方式略有不同(其中一个为浅灰色边框,另一个为浅蓝色边框)。

如何在禁用状态下正确呈现控件?

0
额外 编辑
意见: 1

2 答案

是否有 ControlPaint 方法可用于这个?这就是我通常用于自定义渲染控件的原因。

0
额外

我不是100%确定这是您正在寻找的内容,但您应该查看System.Windows.Forms.VisualStyles命名空间中的 VisualStyleRenderer

  1. VisualStyleRenderer class (MSDN)
  2. How to: Render a Visual Style Element (MSDN)
  3. VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)

由于如果用户没有启用视觉样式(他/她可能正在运行“经典模式”或Windows XP之前的操作系统),VisualStyleRenderer将不起作用,您应该始终拥有对ControlPaint类的回退功能。

// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS 
    && VisualStyleInformation.IsEnabledByUser) 
{
    renderer = new VisualStyleRenderer(
        VisualStyleElement.ComboBox.DropDownButton.Disabled);
}

然后在绘图时这样做:

if(renderer != null)
{
    // Use visual style renderer.
}
else
{
    // Use ControlPaint renderer.
}

希望能帮助到你!

0
额外