DependencyProperty方向问题

时间:2010-05-04 16:10:30

标签: wpf user-controls dependency-properties

我正在学习WPF并正在尝试创建我的第一个UserControl。我的UserControl包含

  1. 的StackPanel
  2. StackPanel包含Label和TextBox
  3. 我正在尝试创建两个依赖属性

    1. 标签的文字
    2. StackPanel的方向 - 方向将有效地影响Label和TextBox的位置
    3. 我已成功创建 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); }
          }      
      

1 个答案:

答案 0 :(得分:4)

错误消息说明了一切。 as运算符只能与可以为空的Type一起使用(引用类型或Nullable<T>),,因为它将返回值cast或null。

您尝试使用它的是枚举。

只需使用常规演员:

get { return (System.Windows.Controls.Orientation) GetValue(OrientationProperty); } 

原因:

  1. 您在DependencyProperty.Register调用中定义默认值,消除任何默认空值
  2. 您的DependencyProperty为typeof(Orientation),不允许空值
  3. 您班级的属性定义为Orientation,不允许空值
  4. 任何通过直接调用SetValue(OrientationProperty, null)设置无效值的尝试都会收到异常,因此即使是顽皮的用户,您的属性获取器也不会看到空值。