WPF Animation "Cannot freeze this Storyboard timeline tree for use across threads"
Solution 1
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.
Solution 2
There is a technique that you can use to get around the Freezable issue that allows you to use a binding for the "To" value of your animation (rather than hard-coding a value there). Its pretty straightforward and I've outlined it here.
Solution 3
Old question but might be useful for other people. Sometimes creating the Storyboard in the code-behind can be simpler: https://stackoverflow.com/a/10848781/779521
jwarzech
Former C# and Ruby developer, curious about all technologies/platforms.
Updated on June 03, 2022Comments
-
jwarzech almost 2 years
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>