我有一个包含媒体元素控件的,它是从WPF Media Kit库中派生的
我发现当在中使用时,这些属性会在模板卸载之前被重置为默认值,但在
当控件仅是页面上的一个元素时,并且通过正常的导航事件发生
调试DependencyPropertyChanged EventHandler揭示了一个内部方法
有人知道为什么会发生这种情况吗?我可以将
如果您需要更多关于我正在做什么以及为什么要更改
MediaElementBase
。MediaElementBase类提供了两个属性:LoadedBehavior
和UnloadedBehavior
,允许用户指定元素加载/卸载时发生的情况。我发现当在中使用时,这些属性会在模板卸载之前被重置为默认值,但在
Unloaded
事件被调用之前,这意味着只有默认的UnloadedBehavior
会被执行:<DataTemplate DataType="{x:Type Channels:AnalogChannel}">
<Controls:AnalogTvGraphFileElement
LoadedBehavior="Play"
UnloadedBehavior="Stop"
Channel="{Binding}" />
</DataTemplate>
当控件仅是页面上的一个元素时,并且通过正常的导航事件发生
Unloaded
,则不会发生这种情况。调试DependencyPropertyChanged EventHandler揭示了一个内部方法
System.Windows.StyleHelper.InvalidatePropertiesOnTemplateNode
(在PresentationFramework.dll中),它检查DependencyProperty
是否可能被继承,如果没有,则使其无效。确实,更改LoadedBehavior
/UnloadedBehavior
的属性元数据以添加FrameworkPropertyMetadataOptions.Inherits
,可以防止在模板更改时重置此属性。有人知道为什么会发生这种情况吗?我可以将
Inherits
标志添加为解决方法,因为此元素没有子元素会受到影响,但我想知道为什么/是否正确。如果您需要更多关于我正在做什么以及为什么要更改
DataTemplates
的信息,请查看this question以获取描述。