按类型更改控件类型

时间:2010-03-30 10:48:59

标签: c# wpf properties types

我遇到了以下问题 我应该将控件转换为某种类型,这可以是多种类型 (例如自定义按钮或自定义标签,....)
这是我想做的一个例子:

private void ConvertToTypeAndUseCustomProperty(Control c)
{
     Type type = c.getType();
     ((type) c).CustomPropertieOfControl = 234567;
}

提前致谢

2 个答案:

答案 0 :(得分:4)

假设您控制具有“CustomPropertyOfControl”的类型是否公平?如果是这样,让它们全部实现一个接口,并转换为该接口。

强制转换的目的是告诉编译器你知道它不是 - 在编译时。这里你不知道编译时的类型。如果您知道一些基类或接口,那么您可以告诉编译器 没有问题。

现在在C#4中,可以使用动态输入执行此操作:

private void ConvertToTypeAndUseCustomProperty(Control c)
{
    dynamic d = c;
    d.CustomPropertyOfControl = 234567;
}

然而,即使你可以这样做,我仍然建议尽可能坚持使用静态类型 - 如果你有一组所有类型都具有一些共同功能,请给出他们是一个共同的界面。

答案 1 :(得分:1)

虽然在4.0之前的C#不像VB那样支持动态类型分辨率,但它可以通过一点点反射来实现。

private void ConvertToTypeAndUseCustomProperty(Control c) 
{ 
   PropertyInfo p = c.GetType().GetProperty("CustomPropertieOfControl"); 
   if (p == null)
     return;
   p.SetValue(c, new object[] { 234567 }); 
}