UIElement.RenderTransformOriginProperty'ye PropertyChangedCallback eklemeye çalışıyorum. PropertyMetadata'yı geçersiz kılmaya çalıştığımda bir istisna atılır.Varolan bir bağımlılık özelliği geri çağrısına nasıl mantık ekleyebilirim?
MSDN ve Google'da arama yaptım ve tüm yapabilme yeteneğim this. DependencyPropertyDescriptor.AddValueChanged, bu gönderide bir noktada önerilir, ancak bu, her bir örnek geri çağrı olmadığından sorunumu çözmez.
Bu özel durumun ne anlama geldiğini anlamıyorum. Yanlış yaptığımı bilen var mı?
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);
}
}
Bu mükemmel! Teşekkürler! Çerçevenin otomatik olarak benim için böyle bir iş yapmayacağını düşünmeye eğilimliyim. Sanırım yüksek seviye egemenlik döneminde düşük seviyeli bir mühendis olmanın öfke tehlikesi ... – Giffyguy
Hehe, buna sempati duyabiliyorum. WPF'yi "cosher" WPF yolunu kullanamadığım zaman bir Win32 programcı bakış açısıyla bükmeye çalışmak için sayısız saatler harcadım. –
Düzenlemenizle ilgili olarak: Oh dang, bu beni biraz atıyor - Bazı salt okunur FrameworkElement bağımlılık özelliklerinde de değişiklikler dinlemem gerekiyor. Bu durumda, ne önerirsiniz? Gerçekten, gerçekten benim sınıfımın her örneğinde AddValueChanged kullanarak uygulamak denemek istemiyorum. Her ne kadar, herhangi bir performans isabeti olmadığı sürece PropertyChangedCallback'e rağmen sanırım bir şey olmaz. Ne yazık ki, bunun her açıdan verimli olması gerekiyor. – Giffyguy