如何在 Windows 自定义控件中设置动态属性
本文关键字:设置 动态 属性 自定义控件 Windows | 更新日期: 2023-09-27 18:27:57
我创建了一个用户控件,它有两个属性
- 类型
- 参数
其中Type
是枚举,
public enum Type { XType , YType }
Parameter
属于String
类型
现在,我需要将Parameter
更改为枚举。我敢肯定每个Type
都会有两个参数.
哪些是XTypeFoo, XTypeBar, YTypeFoo, YTypeBar
.
在此之前,我将Parameter
保留为String
财产。现在我为此创建了两个枚举,
public enum XParameter { XTypeFoo, XTypeBar } and
public enum YParameter { YTypeFoo, YTypeBar }
现在我需要将 Parameter
属性的类型从 string
更改为其他类型(取决于Type
(
即,如果用户选择Type
作为XType
,那么Parameter
应该是XParameter
,如果是YType
则XParameter
。
那么什么是基本类型。
不可能,我认为不需要。你应该重新设计你的类。
拥有一个只有{ Foo, Bar }
参数的枚举怎么样?
你不能从enums
固有,所以你需要使用类。要么对每个枚举值使用类常量,要么使用"Dummyclass":
在这两种情况下,您都使用基类:
public class BaseParameter { }
"假人类":
public class XParameter : BaseParameter { }
public class YParameter : BaseParameter { }
public class XTypeFoo : XParameter { }
public class XTypebar : XParameter { }
public class YTypeFoo : YParameter { }
public class YTypebar : YParameter { }
常数:
public class XParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new XParameter();
public readonly BaseParameter TypeBar = new XParameter();
}
public class YParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new YParameter();
public readonly BaseParameter TypeBar = new YParameter();
}
在这两种情况下,您都可以使用IsAssignable
来检查XParameter
或YParamter
以及您使用的确切value is XTypeFoo
或value == XParameter.TypeFoo
。
如果Type
将是一个枚举,并且Parameter
也将是一个枚举(尽管允许的值将取决于Type
(,那么基本上,所有可能的值都是事先知道的。那么,为什么不对Parameter
和丢弃Type
属性进行单个组合枚举呢?例如
public enum ParameterType
{
XTypeFoo,
XTypeBar,
YTypeFoo,
YTypeBar,
}
或者,您可以开始向Parameter
询问类型信息。例如
public interface IParameter
{
public ParamType GetParamType();
}
public sealed class FooParameter : IParameter
{
public static readonly FooParameter XParameter = new FooParameter();
public static readonly FooParameter YParameter = new FooParameter();
public ParamType GetParamType() { return ParamType.Foo; }
private FooParameter() { }
}
public sealed class BarParameter : IParameter
{
public static readonly BarParameter XParameter = new BarParameter();
public static readonly BarParameter YParameter = new BarParameter();
public ParamType GetParamType() { return ParamType.Bar; }
private BarParameter() { }
}
public class MyControl : UserControl
{
IParameter Parameter {get; set; }
...
}