總之,我們正在創建一個僅適用於FrameworkElement
或其子類之一的附加屬性。我們想要的是如果它被應用於任何不是的東西的話,就會阻止這個集合。對於WPF AttachedProperty,您可以根據您附加的類型驗證值嗎?
現在我們不能使用ValidateValueCallback
,因爲只傳遞屬性的值,而不是您將屬性附加到的值。
同樣,我們不能使用PropertyChangedCallback
因爲值已經被設置在這一點上,和NewValue
是隻讀的,由於某種原因,我們不能得到ClearValue
爲「棒」裏面。
那麼...無論如何要做我們想要的?
這並不工作設定值。那麼它的部分原因是它會阻止它在XAML中設置(它會在運行時拋出異常),您仍然可以通過代碼隱藏設置它,因爲您可以繞過CLR獲取器和設置器。這就是爲什麼你不應該在這些方法中放置任何邏輯 - 不能保證它們會被使用。它們只是爲了方便直接從代碼中調用,但可以通過直接簡單地調用e.SetValue(MyPropertyProperty,value)來輕鬆繞過 – MarqueIV