C# 在设计器中显示可浏览的子属性

标签 c# properties designer children componentmodel

我使用的是 .NET C# 和标准 WinForms,而不是 WPF。

我有这种情况。 我正在为月历创建一个用户控件,类似于 .NET 控件,但功能更多一些。 我有一个用户控制表单,其中填充了代表日期的按钮对象。 这些按钮可以根据它们的状态(选中、鼠标悬停、周末...)用不同的颜色着色

我希望它的工作方式是扩展按钮类以接受确定颜色的状态,而不是从父(用户控件)类为它们着色。目前有 10 种颜色,我真的不想用着色条件搞乱用户控制代码。

我还想在设计时使用可浏览的设计器属性选择所有颜色。 问题在于设计器仅显示在用户控件类中定义的属性,而不显示其子项(按钮)。

这个问题有解决办法吗? 所以简而言之,我想使用内部按钮属性更改颜色,并能够在设计时选择它们,使用设计器属性,而不是手动对它们进行硬编码。

最佳答案

好的,我会尝试通过代码来解释:

例如,我有一个用户控件和一个按钮类。 我想公开 Button 属性,并使它们在设计器中的 MyControl 属性中可见。

class MyControl : UserControl
{
     private MyButton button;
     button.ChangeStyle("Selected");
}

class MyButton : Button
{
     private Color buttonColor;

     public void ChangeStyle(string styleName)
     {
          if (styleName == "Selected")
              this.BackColor = buttonColor;
     }

     [Browsable(true)]
     [Category("Button style")]
     public Color ButtonColor
     {
          get { return buttonColor; }
          set { buttonColor = value; }
     }
}

这是一个简单的例子。通常我有 5 种不同的样式,包括每种样式的背景和前景色。因此,我不想在 MyControl 类中管理颜色,而是想在 MyButton 类中定义它们。但这种方式的问题是 MyButton 类中的属性在设计器中不可见,因为它只关注 MyControl 属性。

顺便说一句。忽略代码示例中缺少的构造函数和其他基本类的东西

我不能使用:

[Category("Wonder Control")]
public Color ButtonBackColor { get { return button.BackColor; } set { button.BackColor = value; }

因为我在 MyControl 中有 30 个按钮(一个月中的几天),而且我不能只引用一个对象。

关于C# 在设计器中显示可浏览的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728726/

相关文章:

C# - 对大文件进行霍夫曼编码需要太长时间

只有 setter 方法的 iOS 属性

java - Maven : Unable to get Property Value from Proprties file

java - 如何在Spring Boot中从属性文件中读取限定符?

c# - Winforms 设计器生成的组件 IContainer 的用途是什么?

c# - LINQ 中的日期差异逻辑

C# WebClient 使用 Async/Await 并行调用 API

c# - 控件的自定义设计器

c# - 构建后 Unity 游戏无法运行(MissingMethodException)

eclipse - Eclipse 集成中的 Qt 设计器插件(自定义小部件)