35

我有一个以ComboBox为模型的控件。我想渲染控件,使控件边框看起来像标准的Windows ComboBox。具体来说,我遵循了 MSDN 文档,并且控件的所有呈现都是正确的,除了在禁用控件时呈现。

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

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

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

4

2 回答 2

11

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

  1. VisualStyleRenderer 类(MSDN)
  2. 如何:渲染视觉样式元素(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.
}

希望能帮助到你!

于 2008-08-16T21:28:33.287 回答
1

是否有任何ControlPaint方法对此有用?这就是我通常用于自定义呈现控件的内容。

于 2008-08-16T19:58:44.013 回答