代码之家  ›  专栏  ›  技术社区  ›  Scott

Silverlight 2.0:在更改依赖项属性之前,确定是否已设置该属性

  •  2
  • Scott  · 技术社区  · 15 年前

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

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

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

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

    3. 用户在app.xaml中添加了一条特殊的行,表示他们希望所有特定类型的控件的前景都是红色。然后,他们将单个控件的前景值(以xaml为单位)设置为黄色。我希望所有这类控件的前景值都是红色的,除非它们另外指定为黄色。

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

    2 回复  |  直到 15 年前
        1
  •  5
  •   Ciantic    15 年前

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

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

        2
  •  1
  •   Scott    15 年前

    ReadLocalValue (ForegroundProperty)如果此类型为System.Object,则不会在xaml中设置。但是,如果此类型不是System.Object(如System.Windows.Media.Brush),则在xaml中设置。