如何为UserControl实现自己的DataType属性

时间:2012-02-29 09:41:41

标签: wpf user-controls properties

我想实现一个usercontrol,它通过XAML代码获取一个enumtype。现在问题是如何实现可以接收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>

...

TestEnum:

public enum TestEnum
{
    eins,
    zwei,
    drei
}

但这不起作用。似乎永远不会设置EnumType属性。

有没有人知道如何做到这一点?

2 个答案:

答案 0 :(得分: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
    }

它似乎按预期调用,根据需要将Type值分配给TestEnum。

答案 1 :(得分: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"/>

我不确定您为什么使用Type作为属性类型,只需使用TestEnum类型。

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

修改

道歉,我得到了完全错误的结尾,我设法让你的代码编译并运行,但是我没有看到enum类型作为intellisense中的有效类型。