C# Telerik,禁用控件时如何保留自定义着色?

C# Telerik,禁用控件时如何保留自定义着色?,c#,.net,vb.net,winforms,telerik,C#,.net,Vb.net,Winforms,Telerik,我有一个应用了VisualStudio2012Dark主题的RadSplitButton,并通过“编辑UI元素设计”菜单将边框设置为黄色: 问题是,当我禁用控件并将Enabled属性设置为False时,它会完全改变颜色,并在我的应用程序上引发非常糟糕的视觉效果: 我可以指定禁用控件时使用的颜色?这是一种替代解决方案,但我找不到更有效的解决方案: With Me.RadSplitButton1 .DropDownButtonElement.ShouldHandleMouse

我有一个应用了VisualStudio2012Dark主题的RadSplitButton,并通过“编辑UI元素设计”菜单将边框设置为黄色:

问题是,当我禁用控件并将Enabled属性设置为False时,它会完全改变颜色,并在我的应用程序上引发非常糟糕的视觉效果:


我可以指定禁用控件时使用的颜色?

这是一种替代解决方案,但我找不到更有效的解决方案:

    With Me.RadSplitButton1
        .DropDownButtonElement.ShouldHandleMouseInput = False
        .DropDownButtonElement.ActionButton.ShouldHandleMouseInput = False
        .DropDownButtonElement.ArrowButton.ShouldHandleMouseInput = False
         .Cursor = Cursors.No
    End With

这将禁用控件上的鼠标输入,但仅限于此。在不丢失当前颜色的情况下,它被半禁用。

正如Polotoix在其评论中所说,禁用的颜色是预设的,但是可以使用Telerik Style Builder进行修改,请参见下面的更新。另一种方法是将控件放置在透明面板后面,并将其设置为可见或不可见,以使radSplitButton可访问或不可访问。此方法显然不会影响控件的颜色。 因为您也使用了c标记,所以我更愿意用c来表示:

将此类添加到项目中:

class Plexiglass : Control
{
    protected override void OnPaint(PaintEventArgs e)
    {
        if (Parent != null)
        {
            Bitmap plexiCover = new Bitmap(Parent.Width, Parent.Height);
            foreach (Control c in Parent.Controls)
                if (c.Bounds.IntersectsWith(this.Bounds) & c != this)
                    c.DrawToBitmap(plexiCover, c.Bounds);
            e.Graphics.DrawImage(plexiCover, -Left, -Top);
            plexiCover.Dispose();
        }
        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(128, 0, 0, 0)), Bounds);
    }
}
编译项目,将工具箱中的Plexiglass控件添加到表单中,将其拖动到RadsplitButton上并正确调整大小。然后,您可以在表单加载事件中将Plexiglass控件的可见性设置为false,并管理Plexiglass控件的可见性以使splitButton可访问或不可访问。是最终结果,也是演示项目。感谢INTELOCA提供的片段

更新 或者,您可以探索可能的解决方案,使用更改预设颜色。我用过它,但从这看起来你可以改变许多控制颜色和相关的行为。您可以按以下方式访问该工具:开始菜单开始程序电传WinForms Qx 201x的RadControls工具。
在工具中加载RadSplitButton后,在“图元状态”右上面板中添加“禁用状态”,并应用与“正常状态”中相同的颜色。这应该行得通,但正如我所说,我从未使用过它,因此我不确定该过程,但它看起来非常强大,可以避免您必须手动检查控件的所有方法和属性。

所有禁用的颜色似乎都是预设的,您无法更改。它们似乎是按主题分配的,因此,当您修改许多UI元素时,可能会得到非常糟糕的结果,如不可见的按钮文本。您也可以将RadSplitBitton.RootElement.UseDefaultDisabledPaint设置为false,但它基本上不使用主题,因此控件被绘制为ControlDefault,不提供任何禁用提示。当UseDefaultDisabledPaint设置为false时,可以定义控件的禁用状态在主题中的外观-只需添加s.Disabled state,并将其设置为您认为合适的主题。我不确定这一点,属性RadSplitButton.DropDownButtonElement.UseDefaultDisabledPaint说明:获取或设置项目在禁用时是否应使用默认方式绘制项目,使其变为灰色,或者禁用的外观是否应由主题控制。但我不知道该怎么办,因为它不会产生任何效果,我有这样的理由认为这种禁用的自定义是可能的,但隐藏在控件或其子控件上,太多的属性和方法无法逐个研究其功能。谢谢你的回答!我理解你的困境。在asp中,您可以覆盖控件css,但在winform中则是另一回事。这是我建议的解决方法。祝你好运。很抱歉迟了才接受答案,这真是一个很好的把戏。