问题描述
目前,我有一个绑定到我的视图模型属性的所选项目的列表框。只要选择的项目是不是空我想在其上执行的动画。不过,我不断收到以下错误不能冻结跨线程使用这个故事板时间表树并从研究的排序明白为什么会这样。但是我不确定我需要得到我想要的行为什么办法。
<情节提要X:键=ShowItemEdit>
< DoubleAnimation是
Storyboard.TargetName =lstItemList
Storyboard.TargetProperty =ListBox.Width
为了={结合ActualWidth的,的ElementName =用户控件}
持续时间=0:0:0.40/>
...
< /故事板><风格X:键=ListStyle>
< Style.Triggers>
< DataTrigger绑定={结合的SelectedItem,转换器= {StaticResource的IsNullConverter}}VALUE =FALSE>
< DataTrigger.EnterActions>
< BeginStoryboard故事板={StaticResource的ShowItemEdit}/>
< /DataTrigger.EnterActions>
< / DataTrigger>
< /Style.Triggers>
< /样式和GT;< ListBox的X:名称=lstItemList风格= {StaticResource的ListStyle}的SelectedItem ={结合的SelectedItem}>
...
< /列表框>
你能张贴您的故事板?这听起来像你有一些样的故事板定义绑定的。
好了,所以,我怀疑,这是因为您使用的是在
。你不能这样做,因为WPF试图所有资源由效率的杠杆模板当你使用一个<$c$c>Freezable$c$c>,在这种情况下,故事板
绑定故事板
,它prevents它能够被冻结。
I currently have a listbox that has its selected item bound to a property on my ViewModel. Whenever the selected item isn't null I want to perform an animation on it. However I keep getting the following error "Cannot freeze this Storyboard timeline tree for use across threads" and from research sort of understand why this is happening. However I am unsure of what approach I need to take to get the behavior I want.
<Storyboard x:Key="ShowItemEdit">
<DoubleAnimation
Storyboard.TargetName="lstItemList"
Storyboard.TargetProperty="ListBox.Width"
To="{Binding ActualWidth, ElementName=UserControl}"
Duration="0:0:0.40" />
...
</Storyboard>
<Style x:Key="ListStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedItem, Converter={StaticResource IsNullConverter}}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource ShowItemEdit}" />
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
<ListBox x:Name="lstItemList" Style={StaticResource ListStyle}" SelectedItem="{Binding SelectedItem}">
...
</ListBox>
Can you post your Storyboard? It sounds like you have some kind of Binding in the Storyboard definition.
Ok so, as I suspected, it's because you're using a Binding
in your Storyboard
. You can't do this because WPF attempts to freeze all the resources leveraged by a template for efficiency and when you use a Binding on a Freezable
, in this case the Storyboard
, it prevents it from being able to be frozen.
这篇关于WPF动画&QUOT;不能冻结跨线程&QUOT利用这个故事板时间表树;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!