Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 依赖属性定位问题_Wpf_User Controls_Dependency Properties - Fatal编程技术网

Wpf 依赖属性定位问题

Wpf 依赖属性定位问题,wpf,user-controls,dependency-properties,Wpf,User Controls,Dependency Properties,我正在学习WPF,并试图创建我的第一个UserControl。我的用户控件包括 堆垛板 StackPanel包含标签和文本框 我正在尝试创建两个依赖项属性 标签的文本 StackPanel的方向-方向将有效影响标签和文本框的位置 我已成功创建了一个文本依赖项属性,并将其绑定到我的UserControls。但是,当我创建Orientation属性时,我似乎在get属性中发现了以下错误 as运算符必须与引用类型或可为null的类型一起使用(“System.Windows.Controls.Orien

我正在学习WPF,并试图创建我的第一个UserControl。我的用户控件包括

  • 堆垛板
  • StackPanel包含标签和文本框
  • 我正在尝试创建两个依赖项属性

  • 标签的文本
  • StackPanel的方向-方向将有效影响标签和文本框的位置
  • 我已成功创建了一个文本依赖项属性,并将其绑定到我的UserControls。但是,当我创建Orientation属性时,我似乎在get属性中发现了以下错误

    as运算符必须与引用类型或可为null的类型一起使用(“System.Windows.Controls.Orientation”是不可为null的值类型)

    谢谢你的帮助

    编辑: 我改变了代码如下,它似乎工作的预期。但这是解决问题的正确方法吗

    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); }
        }      
    

    错误消息说明了一切。运算符只能与可为null的类型(引用类型,或
    null)一起使用,
    ,因为它将返回值转换或null

    您试图在其上使用的是枚举

    只需使用常规演员阵容:

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

  • 您可以在
    DependencyProperty.Register
    调用中定义默认值,以消除任何默认空值
  • 您的DependencyProperty是
    typeof(Orientation)
    ,它不允许空值
  • 类的属性定义是
    方向
    ,不允许为空
  • 任何通过直接调用
    SetValue(OrientationProperty,null)
    设置无效值的尝试都会收到异常,因此即使是调皮的用户,属性getter也不会看到null值

  • 错误消息说明了一切。运算符只能与可为null的类型(引用类型,或
    null)一起使用,
    ,因为它将返回值转换或null

    您试图在其上使用的是枚举

    只需使用常规演员阵容:

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

  • 您可以在
    DependencyProperty.Register
    调用中定义默认值,以消除任何默认空值
  • 您的DependencyProperty是
    typeof(Orientation)
    ,它不允许空值
  • 类的属性定义是
    方向
    ,不允许为空
  • 任何通过直接调用
    SetValue(OrientationProperty,null)
    设置无效值的尝试都会收到异常,因此即使是调皮的用户,属性getter也不会看到null值

  • 我刚刚添加了我在代码中所做的更改。你能评论一下我的改变吗?我应该直接使用cast还是使用我使用的方法?只需使用cast。您的属性不允许为null的值。(您没有将依赖项属性定义为Orientation?,也没有将属性本身定义为Orientation?,因此不需要as关键字。特别是因为您在依赖项属性定义中提供了默认值Orientation.Horizontal,因此没有定义为null。感谢Adam。我使用了“as”,因为我在一个属性中看到了它依赖项属性的文章,它们用作字符串返回类型。我已经对您的答案进行了投票,现在我将标记为是。感谢您的帮助。我刚刚添加了我在代码中所做的更改。您能对我的更改发表意见吗?我应该直接强制转换还是使用我使用的方法?只使用强制转换。您的属性不允许nullable值。(您没有将依赖项属性定义为Orientation?,也没有将属性本身定义为Orientation?,因此不需要as关键字。特别是因为您在依赖项属性定义中提供了默认值Orientation.Horizontal,因此没有定义为null。感谢Adam。我使用了“as”,因为我在一个属性中看到了它关于Dependency属性的文章,它们用作字符串返回类型。我已经对您的答案进行了投票,现在我将标记为是。感谢您的帮助。