Estoy intentando agregar un PropertyChangedCallback a UIElement.RenderTransformOriginProperty. Se produce una excepción cuando intento anular PropertyMetadata.¿Cómo puedo agregar lógica a una devolución de llamada de propiedad de dependencia existente?
He buscado en MSDN y Google, y todo lo que he podido encontrar es this. DependencyPropertyDescriptor.AddValueChanged se sugiere en algún momento de esa publicación, pero eso no resolverá mi problema ya que no se trata de una devolución de llamada por instancia.
No entiendo lo que significa esta excepción en absoluto. ¿Alguien sabe lo que estoy haciendo 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);
}
}
¡Eso es perfecto! ¡Gracias! Tiendo a asumir que el marco no va a hacer ese tipo de trabajo automáticamente. Supongo que es solo el riesgo ocupacional de ser un ingeniero de bajo nivel en la era del dominio de alto nivel ... – Giffyguy
Hehe, puedo simpatizar con eso. Pasé incontables horas tratando de doblegar a WPF desde la perspectiva de un programador de Win32 cuando no pude encontrar la manera de "cosher" WPF. –
En cuanto a su edición: Oh, dang, eso me saca un poco de velocidad. Tengo que escuchar los cambios en algunas propiedades de dependencia de FrameworkElement de solo lectura, así ... Siendo este el caso, ¿qué sugieres? Realmente, REALMENTE no quiero intentar implementarlo usando AddValueChanged en cada instancia de mi clase. Aunque, supongo que no me importaría, siempre que no tenga ningún impacto en el rendimiento frente a PropertyChangedCallback. Por desgracia, esto tiene que ser eficiente, por supuesto. – Giffyguy