2009-11-03 10 views
19

J'ai actuellement une zone de liste dont l'élément sélectionné est lié à une propriété de mon ViewModel. Chaque fois que l'élément sélectionné n'est pas nul, je veux effectuer une animation dessus. Cependant, je continue d'obtenir l'erreur suivante: "Impossible de geler l'arborescence de la chronologie de Storyboard pour une utilisation entre threads" et de la recherche sorte de comprendre pourquoi cela se produit. Cependant, je ne suis pas sûr de l'approche que je dois adopter pour obtenir le comportement que je veux.WPF Animation "Impossible de geler l'arborescence de la chronologie de Storyboard pour une utilisation sur plusieurs threads"

<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> 

Répondre

25

Pouvez-vous poster votre Storyboard? Il semble que vous ayez une sorte de définition de Binding in the Storyboard.


Ok donc, comme je le soupçonnais, c'est parce que vous utilisez un Binding dans votre Storyboard. Vous ne pouvez pas faire cela parce que WPF tente de freeze toutes les ressources exploitées par un modèle pour l'efficacité et lorsque vous utilisez une liaison sur un Freezable, dans ce cas le Storyboard, il l'empêche de pouvoir être gelé.

+0

J'ai ajouté le code du storyboard. Je lie la propriété 'To' car je ne veux pas coder en dur la largeur. – jwarzech

+0

C'est votre problème alors, je vais vous expliquer. –

+0

Merci pour l'explication! Toute suggestion sur la façon dont je peux réaliser ce storyboard (avec liaison) sans avoir à connecter le datatrigger au contrôle? – jwarzech

5

Il y a une technique que vous pouvez utiliser pour contourner le problème Freezable qui vous permet d'utiliser une liaison pour la « To » valeur de votre animation (plutôt que de coder en dur une valeur là). C'est assez simple et je l'ai décrit here.