10
我想一個PropertyChangedCallback添加到UIElement.RenderTransformOriginProperty。當我嘗試覆蓋PropertyMetadata時引發異常。如何將邏輯添加到現有的依賴屬性回調中?
我已經搜索MSDN和谷歌,而我已經能夠拿出的this。在那篇文章的某個位置建議使用DependencyPropertyDescriptor.AddValueChanged,但這並不能解決我的問題,因爲這不是每個實例的回調。
我不明白這是什麼異常意味着在所有。有誰知道我做錯了什麼?
public class foo : FrameworkElement
{
private static void Origin_Changed(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{ }
static foo()
{
PropertyMetadata OriginalMetaData =
UIElement.RenderTransformOriginProperty.GetMetadata(
typeof(FrameworkElement));
/*An exception is thrown when this line is executed:
"Cannot change property metadata after it has been associated with a property"*/
OriginalMetaData.PropertyChangedCallback +=
new PropertyChangedCallback(Origin_Changed);
UIElement.RenderTransformOriginProperty.OverrideMetadata(
typeof(foo), OriginalMetaData);
}
}
這很完美!謝謝!我傾向於認爲框架不會爲我自動完成這種工作。我想這只是在高級統治時代成爲低級工程師的職業危害...... – Giffyguy 2009-08-21 04:42:43
呵呵,我可以同情這個。當我無法制定出「合併器」WPF方式時,我花了無數小時試圖從Win32程序員的角度來彎曲WPF。 – 2009-08-21 04:50:57
關於您的編輯:哦宕,拋出我從一點點 - 我需要聽更改一些只讀FrameworkElement的依賴的屬性,以及...既然如此,你會建議?我真的不想嘗試在我的類的每個實例上使用AddValueChanged實現它。雖然,我想我不介意,只要它沒有任何性能問題 - 與PropertyChangedCallback相比。唉,無論如何,這需要高效。 – Giffyguy 2009-08-21 05:27:38