gpt4 book ai didi

c# - 在 WinForms 中保留设计时属性

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:43 25 4
gpt4 key购买 nike

我正在为 Windows 窗体编写可设置样式的控件。样式化是指与标准的 BackColorForeColor 等相比,用户可以更好地控制 Control 的外观。以下代码已被简化说明问题

[ToolboxItem(false)]
public class BrushProperties : Component
{
public Color[] GradientColors { get; set; }
public Single[] GradientPositions { get; set; }
public Single GradientAngle { get; set; }
}

[ToolboxItem(false)]
public class Style : Component
{
public BrushProperties Background { get; set; }
public BrushProperties Foreground { get; set; }

public Style()
{
this.Background = new BrushProperties();
this.Foreground = new BrushProperties();
}
}

public class StyleControl : Control
{
public Style Style { get; set; }

public StyleControl()
{
this.Style = new Style();
}
}

当我在设计器中时,我可以看到 Style 的所有属性以及每个 BrushProperties 实例的所有属性。我也可以更改这些值,但是在我构建/运行项目的那一刻,我分配给属性的值就消失了。我的代码需要什么才能保留设计时指定的属性值?

最佳答案

如果目标是获得设计时支持,则无需将所有类都基于 Component目的。相反,您可以使用 ExpandableObjectConverter 装饰您的类(class)属性。

PropertyGrid 将使用 ExpandableObjectConverter 属性来确定是否应该扩展对象的属性。

例子:

[ToolboxItem(false)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class BrushProperties
{
public Color[] GradientColors { get; set; }
public Single[] GradientPositions { get; set; }
public Single GradientAngle { get; set; }
}

[ToolboxItem(false)]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Style
{
public BrushProperties Background { get; set; }
public BrushProperties Foreground { get; set; }

public Style()
{
this.Background = new BrushProperties();
this.Foreground = new BrushProperties();
}
}

关于c# - 在 WinForms 中保留设计时属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30561402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com