如何在启用视觉样式的情况下将控件渲染为看起来像 ComboBox?

StackOverflow https://stackoverflow.com/questions/2874

  •  08-06-2019
  •  | 
  •  

我有一个模仿的控件 组合框. 。我想渲染该控件以便该控件 边界 看起来像标准的 Windows 组合框. 。具体来说,我遵循了 MSDN 文档,除了禁用控件时的渲染之外,所有控件的渲染都是正确的。

需要明确的是,这是针对具有 视觉风格 已启用。此外,除了禁用控件周围的边框(与禁用控件不匹配)之外,控件的所有部分都正确呈现 组合框边框 颜色。

我正在使用 视觉风格渲染器 班级。MSDN 建议使用 VisualStyleElement.TextBox 元素为 文本框 的一部分 组合框 控制但标准禁用 文本框 和一个标准的残疾人 组合框 绘制略有不同(一个具有浅灰色边框,另一个具有浅蓝色边框)。

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

没有正确的解决方案

其他提示

我不能 100% 确定这是否是您正在寻找的,但您应该查看 视觉风格渲染器 在 System.Windows.Forms.VisualStyles 命名空间中。

  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.
}

希望能帮助到你!

是否有以下任何一个 控制画图 方法对此有用吗?这就是我通常用于自定义呈现控件的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top