2

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

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

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

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

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

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

4

2 回答 2

5

从MSDN 页面 ReadLocalValue扩展您的解决方案以完成:

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

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

于 2009-10-14T16:00:32.077 回答
1

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

于 2009-08-13T17:20:15.400 回答