如何在启用了视觉样式的情况下将控件呈现为类似于ComboBox的控件?

时间:2020-03-05 18:37:53  来源:igfitidea点击:

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

需要明确的是,这是针对启用了视觉样式的系统。另外,除了禁用控件周围的边框与禁用的ComboBox边框颜色不匹配之外,控件的所有其他部分都可以正确呈现。

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

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

解决方案

回答

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

回答

我不是100%确定这是否是我们要寻找的东西,但是我们应该在System.Windows.Forms.VisualStyles-namespace中签出VisualStyleRenderer。

  • VisualStyleRenderer类(MSDN)
  • 如何:呈现视觉样式元素(MSDN)
  • 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.
}

希望能帮助到你!