J'essaie d'ajouter un PropertyChangedCallback à UIElement.RenderTransformOriginProperty. Une exception est levée lorsque j'essaie de remplacer le PropertyMetadata.Comment ajouter de la logique à un rappel de propriété de dépendance existant?
J'ai cherché MSDN et Google, et tout ce que j'ai pu trouver est this. DependencyPropertyDescriptor.AddValueChanged est suggéré à un certain moment dans ce post, mais cela ne résoudra pas mon problème car ce n'est pas un rappel par instance.
Je ne comprends pas ce que cette exception signifie du tout. Est-ce que quelqu'un sait ce que je fais mal?
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);
}
}
C'est parfait! Merci! J'ai tendance à supposer que le cadre ne va pas faire ce genre de travail automatiquement pour moi. Je suppose que c'est juste le risque professionnel d'être un ingénieur de bas niveau dans l'ère de la domination de haut niveau ... – Giffyguy
Hehe, je peux sympathiser avec ça. J'ai passé d'innombrables heures à essayer de plier WPF à partir d'une perspective de programmeur Win32 quand je ne pouvais pas travailler sur le chemin "cosher" WPF. –
En ce qui concerne votre montage: Oh dang, ça me dégoûte un peu - j'ai besoin d'écouter les changements de certaines propriétés de dépendances de FrameworkElement en lecture seule, aussi ... Dans ce cas, que suggérez-vous? Je ne VRAIMENT pas vraiment essayer de l'implémenter en utilisant AddValueChanged sur chaque instance de ma classe. Bien que, je suppose que cela ne me dérangerait pas, tant qu'il n'a pas de hit de performance - par rapport à PropertyChangedCallback. Hélas, cela doit être efficace, par tous les moyens. – Giffyguy