2008-08-05 27 views
27

我有一个模仿ComboBox的控件。我想呈现控件,以便控件边框看起来像标准的Windows组合框。具体来说,我遵循MSDN文档,并且控件的所有呈现都是正确的,除了在禁用控件时呈现。如何使控件看起来像启用了视觉样式的组合框?

需要说明的是,这适用于启用了视觉样式的系统。此外,控件的所有部分都呈现正确,除了禁用的控件的边框外,其与禁用的组合框边框颜色不匹配。我正在使用VisualStyleRenderer类类。 MSDN建议使用VisualStyleElement.TextBox元件为文本框部分组合框控制的,但一个标准禁用文本框和一个标准禁用组合框绘制略有不同(一个具有浅灰色的边框,另浅蓝色边框) 。

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

回答

1

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

8

我不是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)

因为如果用户没有启用视觉样式(VisualStyleRenderer将无法正常工作,他/她可能在Windows XP之前运行“经典模式”或操作系统),您应该始终拥有对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. 
} 

希望它能帮助!

相关问题