【问题标题】:Silverlight 2.0: Determine if a dependency property is set before changing itSilverlight 2.0:在更改依赖属性之前确定是否设置了依赖属性
【发布时间】:2010-11-19 09:21:28
【问题描述】:

我在从 Control 继承的自定义控件上有一个依赖属性(前景)。当我加载控件时,我想查看用户是否设置了依赖属性,或者在我为它们设置值之前它是否使用了它的默认值。这个问题有点复杂,这里是:

该控件位于用户添加到其项目中的自定义控件库中。当他们设置他们的项目时,我可以让他们使用给定的 x:key 在他们的 app.xaml 文件中添加一行,其中包含我在为控件设置默认值时读取的设置。但是,如果他们在代码或 xaml 中设置值,我不想使用此全局值设置值。这里有几个案例可以帮助我理解我在说什么:

  1. 用户从我的库中创建一个控件并将其放在他们的页面上。然后他们将前景设置为绿色。我希望该控件的前景值为绿色。

  2. 用户在他们的 app.xaml 中添加了一个特殊行,声明他们希望特定类型的所有控件都具有红色的前景。我希望所有此类控件的前景值都是红色的。

  3. 用户在他们的 app.xaml 中添加了一个特殊行,声明他们希望特定类型的所有控件都具有红色的前景。然后,他们将单个控件(在 xaml 中)的前景值设置为黄色。我希望这种类型的所有控件的前景值都是红色的,除了他们指定为黄色的那个。

加载控件时,我想读取依赖属性以查看它们是否设置了值,或者它是否是样式中定义的默认值。如果它是默认值,我想从 app.xaml 文件中读取他们的特殊行并将前景设置为该颜色。

【问题讨论】:

    标签: user-controls controls silverlight-2.0 dependency-properties control-library


    【解决方案1】:

    我做了更多的研究,相信我已经找到了答案。当我加载控件(或更新)时,我检查ReadLocalValue(ForegroundProperty) 的类型,如果此类型为 System.Object,则它未在 xaml 中设置。但是,如果此类型不是 System.Object(如 System.Windows.Media.Brush),则它在 xaml 中设置。

    【讨论】:

      【解决方案2】:

      扩展您的解决方案以完成,从MSDN page ReadLocalValue

      if (ReadLocalValue(FontSizeProperty) == DependencyProperty.UnsetValue)
          // Do your thing...
      

      也就是说,存在 DependencyProperty.UnsetValue 以检查该值是否已设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多