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

标签 c# .net vb.net winforms telerik

我有一个应用了 VisualStudio2012Dark 主题的 RadSplitButton,我通过 Edit UI elements 将边框设置为黄色设计菜单:

enter image description here

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

enter image description here

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

最佳答案

正如 Plutonix 在他的评论中所说,禁用的颜色是预先设置的,但是可以使用 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 可访问或不可访问。 Here是最终结果,here是演示项目。感谢 IntelOrca 提供的代码片段。

更新 或者,您可以探索使用 Visual Style Builder 更改预设颜色的可能解决方案。 .我有新的使用它但是从这个video看起来您可以更改许多控件颜色和相关行为。您可以按以下方式访问该工具:“开始菜单(开始 程序 Telerik RadControls for WinForms Qx 201x 工具)”。 在工具中加载 RadSplitButton 后,在元素状态(右上面板)中添加状态“已禁用”,并将其应用与正常状态下相同的颜色。这应该可行,但正如我所说,我从未使用过它,所以我不确定该过程,但它看起来非常强大,并且可以避免您必须手动完成控件的所有方法和属性。

关于c# - Telerik,禁用控件时如何保留自定义着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25593771/

相关文章:

c# - 是否可以将密码输入字符串确定为明文或散列?

arrays - 将 VB.Net 数组转换为 C#

C# GC.Collect 如果对象是使用实例构造函数初始值设定项构造的,则不会销毁该对象

c# - 将 XML 字符串反序列化为复杂类型

c# - 如何在没有 AVISaveOptions 对话框的情况下获得 AVICOMPRESSOPTIONS?

.net - 使用 WinDbg 分析 .NET 转储

sql - 从 sql 查询查看数据到 vb.net

javascript - 服务器调用一些(但不是全部)客户端方法

c# - UnmanagedExports 函数参数 - 导致 VBA 49 错误的 DLL 调用约定

c# - 获取 RGB 类型 : sRGB or AdobeRGB in C#?