【问题标题】:How to set default value of DependencyProperty of a type derived from DependencyObject如何设置从 DependencyObject 派生的类型的 DependencyProperty 的默认值
【发布时间】:2014-06-24 16:06:42
【问题描述】:

我正在创建一个不是 UserControl 的自定义 WPF 控件。此自定义控件有两个属性(UnselectedAppearance 和 SelectedAppearance)。这两个属性都属于从 DependencyObject 派生的相同类型(外观)。 Appearance 类本身有几个 DependencyProperties。我想知道为每个外观属性设置默认值的正确方法。我尝试过如下代码,但是当我尝试在设计器中使用自定义控件时会引发异常。

public static readonly DependencyProperty UnselectedAppearanceProperty = DependencyProperty.Register("UnselectedAppearance", typeof(Appearance), typeof(FNDie), new PropertyMetadata(new Appearance()));

有什么办法可以做到吗?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    依赖属性的默认值在该依赖对象的所有实例之间共享,因此 null 以外的值通常只对值类型或不可变类有意义。换句话说,你可能很难学会,null 可能是你最好的选择。

    如果您迫切需要为依赖属性设置可变引用值,您可以将默认值保留为 null 并在构造函数中进行设置。但是,您应该知道,这样做会使该属性无法使用样式进行设置,这可能是一个严重的限制,具体取决于您的需要。

    【讨论】:

    • 是的,是的,是的。我处于严重的限制阶段,需要将 DependencyProperty 默认值设置为 Silverlight 5 中的引用类型,它没有可以在 WPF 中执行的 SetCurrentValue()
    【解决方案2】:

    您应该在您正在调用的构造函数中初始化所有非依赖属性(这里是默认的无参数属性)。可以像使用 new PropertyMetadata(new Appearance()); 一样为依赖属性赋予默认值

    【讨论】:

      【解决方案3】:

      你需要像这样使用属性元数据

      class MyValidation
      { 
      
          public bool status
              {
                  get { return (bool)GetValue(statusProperty); }
                  set { SetValue(statusProperty, value); }
              }
      
              public static readonly DependencyProperty statusProperty =
                  DependencyProperty.Register("status", typeof(bool), typeof(MyValidation),new PropertyMetadata(false) );
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-25
        • 2012-02-23
        • 2016-03-18
        • 1970-01-01
        • 2017-10-30
        • 2011-01-17
        • 2012-07-11
        • 1970-01-01
        相关资源
        最近更新 更多