Tengo un DataTemplate
que consiste en un elemento de control de medios derivado de MediaElementBase
de la biblioteca WPF Media Kit. La clase MediaElementBase proporciona las dos propiedades, LoadedBehavior
y UnloadedBehavior
, que permiten al usuario especificar qué sucede cuando el elemento se carga/descarga.WPF DataTemplate restablece algunas propiedades de dependencia cuando se descarga
Estoy descubriendo que cuando se utiliza esta en un DataTemplate
(a continuación), estas propiedades reconfiguradas a su valor por defecto cuando se descarga la plantilla, pero antes del evento Unloaded
se llama, es decir, sólo el valor por defecto UnloadedBehavior
jamás ejecutar:
<DataTemplate DataType="{x:Type Channels:AnalogChannel}">
<Controls:AnalogTvGraphFileElement
LoadedBehavior="Play"
UnloadedBehavior="Stop"
Channel="{Binding}" />
</DataTemplate>
Esto no se produce cuando el control es simplemente un elemento de una página y Unloaded
se produce a través de un evento normal de navegar-lejos.
Depuración del DependencyPropertyChanged EventHandler revela que un método interno System.Windows.StyleHelper.InvalidatePropertiesOnTemplateNode
(en PresentationFramework.dll) comprueba si un DependencyProperty
es potencialmente hereditaria, y si no lo es, lo invalida. Efectivamente, al cambiar los metadatos de la propiedad para LoadedBehavior
/UnloadedBehavior
para agregar FrameworkPropertyMetadataOptions.Inherits
se detiene esta propiedad para que no se restablezca cuando la plantilla cambie.
¿Alguien sabe por qué ocurre esto? Puedo agregar el indicador Inherits
como una solución, ya que este elemento no tiene elementos secundarios que se verían afectados por esto, pero me gustaría saber por qué y si es lo correcto.
Si busca más información sobre lo que estoy haciendo y por qué estoy cambiando DataTemplates
, puede ver this question para una descripción.
¿Qué versión del kit de medios WPF está utilizando? ¿La versión binaria actual o estás compilando desde la fuente? En el momento de escribir este comentario, el binario actual (v1.5) está a un año del árbol fuente. Jez corrigió algunos errores relacionados con los valores de las propiedades que cambiaban repentinamente. No creo que la solución esté directamente relacionada con las propiedades que está utilizando, pero para reproducir el problema, sería útil saber qué versión está utilizando. –
Estoy compilando desde la fuente. El problema no es específico del WPF Media Kit: puedo reproducirlo en una simple aplicación independiente. – jeffora
El problema tal como se describe es acerca de UnloadedBehavior. Entiendo que la causa raíz (el hecho de que las propiedades se restablezcan en una descarga) sería universal, pero ¿qué problemas causa en general? En el Kit de medios de WPF es un problema porque tienes esta propiedad donde solo te importa cuál es el valor después de la descarga. ¿Con qué frecuencia importa eso? –