我想实现一个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属性。
有没有人知道如何做到这一点?
答案 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中的有效类型。