首页 / 知识

关于c#:如何在启用了”视觉样式”的情况下将控件呈现为类似于ComboBox的外观?

2023-04-11 17:11:00

关于c#:如何在启用了”视觉样式”的情况下将控件呈现为类似于ComboBox的外观?

How to render a control to look like ComboBox with Visual Styles enabled?

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

请注意,这是针对启用了视觉样式的系统。另外,控件的所有部分均正确呈现,但禁用控件周围的边框与禁用的ComboBox边框颜色不匹配。

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

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


我不确定100%是否是您要查找的内容,但您应该在System.Windows.Forms.VisualStyles-namespace中签出VisualStyleRenderer。

  • VisualStyleRenderer类(MSDN)
  • 如何:呈现视觉样式元素(MSDN)
  • VisualStyleElement.ComboBox.DropDownButton.Disabled(MSDN)
  • 由于如果用户未启用视觉样式(他/她可能正在运行"经典模式"或Windows XP之前的操作系统),VisualStyleRenderer将无法工作,则应该始终使用ControlPaint类作为后备。

    1
    2
    3
    4
    5
    6
    7
    // Create the renderer.
    if (VisualStyleInformation.IsSupportedByOS
        && VisualStyleInformation.IsEnabledByUser)
    {
        renderer = new VisualStyleRenderer(
            VisualStyleElement.ComboBox.DropDownButton.Disabled);
    }

    ,然后在绘制时执行以下操作:

    1
    2
    3
    4
    5
    6
    7
    8
    if(renderer != null)
    {
        // Use visual style renderer.
    }
    else
    {
        // Use ControlPaint renderer.
    }

    希望有帮助!


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


    控件视觉启用边框

    最新内容

    热门文章

    推荐文章

    标签云

    猜你喜欢