2012-02-29 61 views
0

我想实现一个usercontrol,它通过XAML代码获取枚举类型。现在的问题是如何实现一个可以接收DataType的属性。什么到目前为止,我已经试过如下:如何为UserControl实现自己的DataType属性

代码背后:

public partial class Test : UserControl, INotifyPropertyChanged 
{ 
     #region DependencyProperty: EnumType 
     public Type EnumType 
     { 
      get 
      { 
       return (Type)GetValue(EnumTypeProperty); 
      } 
      set 
      { 
       SetValue(EnumTypeProperty, value);     
      } 
     } 

     public static readonly DependencyProperty EnumTypeProperty = 
      DependencyProperty.Register("EnumType", typeof(Type), typeof(Test), 
      new FrameworkPropertyMetadata()); 
     #endregion 
} 

而在XAML我尝试这样做:

...

<Grid> 
     <local:Test EnumType="{x:Type local:TestEnum}" /> 
</Grid> 

...

The TestEnum:

public enum TestEnum 
{ 
    eins, 
    zwei, 
    drei 
} 

但这并不奏效。看来EnumType属性从未设置。

有没有人有关于如何做到这一点的想法?

回答

0

尝试

public static DependencyProperty EnumValueProperty = DependencyProperty.Register("EnumValue", typeof(TestEnum), typeof(Test), new PropertyMetadata(null)); 

    public TestEnum EnumValue 
    { 
     get { return (TestEnum)GetValue(EnumValueProperty); } 
     set { SetValue(EnumValueProperty, value); } 
    } 

<local:Test EnumValue="eins"/> 

我不知道为什么你使用类型为您的属性类型,只需使用TestEnum类型。

你有任何生成错误吗?我经常发现有时智能感知在XAML编辑器中失败,直到我再次构建控件,可能是一个红色的鲱鱼。

编辑

道歉,我得到了棍子的完整错误的结束,我设法让你的代码编译和运行,但我不明白看到枚举类型为有效类型智能感知。

+0

推测TestEnum只是一个例子。 EnumType属性应该可以设置为任何类型。 – 2012-02-29 10:03:04

+0

我说的是属性的数据类型是“类型”,而不是枚举类型: 公*类型* EnumType – 2012-02-29 10:04:08

+0

@ bobsmith833,对不起,我没有被正确读取的问题都没有。 – 2012-02-29 10:19:38

2

是什么让你觉得它不起作用?我想你的代码之上,加入了PropertyChangedCallback:

public static readonly DependencyProperty EnumTypeProperty = 
     DependencyProperty.Register("EnumType", typeof(Type), typeof(Test), 
     new FrameworkPropertyMetadata(MyCallBack)); 

    private static void MyCallBack(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     // See if we reach this point 
    } 

而且似乎像预期的那样被调用,因为你需要指定类型值TestEnum。

+0

噢,我看到 - 我只是看在错误的地方要更改的属性!非常感谢你们所有的答案 - 再次帮助我! 竖起大拇指! – Michael 2012-02-29 10:34:02

相关问题