2

對從Control繼承的自定義控件有一個依賴屬性(Foreground)。當我加載控件時,我想查看用戶是否設置了依賴項屬性,或者是否在爲它們設置值之前使用其默認值。這個問題有點複雜,那麼這裏是:Silverlight 2.0:確定在更改它之前是否設置了依賴項屬性

該控件位於用戶添加到其項目中的自定義控件庫中。當他們設置他們的項目時,我有能力讓他們用給定的x:鍵添加一行到他們的app.xaml文件中,該鍵包含我在爲控件設置默認值時閱讀的設置。但是,如果他們在代碼或xaml中設置值,我不想使用此全局值設置值。這裏有幾個案例,以幫助形象化什麼我談論:

  1. 用戶創建從我的庫中的控制,並把它自己的頁面上。然後他們將前景設置爲綠色。我希望前景的價值爲該控件的綠色。

  2. 用戶在其app.xaml中添加了一個特殊行,表示他們希望特定類型的所有控件都具有紅色的前景。我希望這種類型的所有控件的前景的價值都是紅色的。

  3. 用戶在其app.xaml中添加了一個特殊行,表示他們希望特定種類的所有控件都具有紅色的前景。然後他們將單個控件(xaml)的前景值設置爲黃色。我希望這種類型的所有控件的前景的值都是紅色的,除了那些他們另外指定爲黃色的控件。

當裝載控制,我想讀的依賴屬性,看看他們是否已設置的值,或者如果它是在風格定義的默認值。如果它是默認值,那麼我想要從app.xaml文件中讀取它們的特殊行並將其設置爲該顏色。

回答

1

我已經做了更多的研究,並相信我找到了答案。當我加載控件(或更新)時,如果此類型爲System.Object,則檢查ReadLocalValue(ForegroundProperty)的類型,然後在xaml中未設置該類型。但是,如果此類型是System.Object(如System.Windows.Media.Brush)之外的其他類型,那麼它將在xaml中設置。

5

擴展您的解決方案來完成,從MSDN page ReadLocalValue

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

也就是說,存在DependencyProperty.UnsetValue針對其檢查,如果該值設置與否。