我正在学习WPF并正在尝试创建我的第一个UserControl。我的UserControl包含
我正在尝试创建两个依赖属性
我已成功创建 Text 依赖项属性并将其绑定到我的UserControls。但是当我创建Orientation属性时,我似乎在 get 属性
中出现以下错误as运算符必须与引用类型或可空类型一起使用('System.Windows.Controls.Orientation'是不可为空的值类型)
public static DependencyProperty OrientationProperty = DependencyProperty.Register("Orientation", typeof(System.Windows.Controls.Orientation), typeof(MyControl), new PropertyMetadata((System.Windows.Controls.Orientation)(Orientation.Horizontal)));
public Orientation Orientation
{
get { return GetValue(OrientationProperty) as System.Windows.Controls.Orientation; }
set { SetValue(OrientationProperty, value); }
}
感谢您的帮助。
修改 我更改了下面的代码,它似乎按预期工作。但这是解决问题的正确方法吗?
public Orientation Orientation
{
get
{
Orientation? o = GetValue(OrientationProperty) as System.Windows.Controls.Orientation?;
if (o.HasValue)
{
return (System.Windows.Controls.Orientation)o.Value;
}
else
{
return Orientation.Horizontal;
}
}
set { SetValue(OrientationProperty, value); }
}
答案 0 :(得分:4)
错误消息说明了一切。 as运算符只能与可以为空的Type一起使用(引用类型或Nullable<T>),
,因为它将返回值cast或null。
您尝试使用它的是枚举。
只需使用常规演员:
get { return (System.Windows.Controls.Orientation) GetValue(OrientationProperty); }
原因:
DependencyProperty.Register
调用中定义默认值,消除任何默认空值typeof(Orientation)
,不允许空值Orientation
,不允许空值SetValue(OrientationProperty, null)
设置无效值的尝试都会收到异常,因此即使是顽皮的用户,您的属性获取器也不会看到空值。