我使用的是 .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/