2012-03-15 3 views
0

Je ne sais pas de résoudre le problème avec le code follwing:changement de données dans DataContext avec animation

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Window.Resources> 
    <XmlDataProvider x:Key="InternalData" XPath="/Workspace"> 
     <x:XData> 
     <Workspace Name="Workspace" xmlns=""> 
      <Project Name="Project 1"/> 
      <Project Name="Project 2"/> 
      <Project Name="Project 3"/> 
     </Workspace> 
     </x:XData> 
    </XmlDataProvider> 
    </Window.Resources> 

    <StackPanel DataContext="{StaticResource InternalData}"> 
    <ListBox ItemsSource="{Binding XPath=//Workspace/Project}"> 
     <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding [email protected]}"/> 
     </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox>   
    <TextBox Text="{Binding XPath=//Workspace/Project[1]/@Name, Mode=TwoWay}"/> 

    </StackPanel> 
</Window> 

Comme vous pouvez le voir, je peux changer le nom du premier projet dans l'espace de travail avec la zone de texte. En changeant les données, je veux démarrer une animation pour fondre l'ancienne valeur, changer la valeur et démarrer une animation pour fondre dans la nouvelle valeur (par exemple opacité de "Projet 1" de 1 à 0, changer les données et l'opacité de "" de 0 à 1) Si possible, je voulais implémenter la solution uniquement en XAML. Mais aucune idée. Peut-être quelque chose avec DataTrigger et EnterAction et ExitAction ou des trucs comme ça?

Amitiés Shounborugh

Répondre

0

Vous pouvez essayer de regarder pour storyboards WPF. C'est une pratique courante si vous voulez démarrer une animation en utilisant uniquement XAML. C'est le meilleur endroit pour commencer sur les storyboards dans WPF http://msdn.microsoft.com/en-us/library/ms742868.aspx

Voici comment vous pouvez commencer le story-board sur la modification du texte dans la zone de texte

<TextBox Height="23" HorizontalAlignment="Left" Margin="90,44,0,0" Name="textBox1" VerticalAlignment="Top" Width="120"> 
      <TextBox.Triggers> 
       <EventTrigger RoutedEvent="TextBox.TextChanged"> 
        <BeginStoryboard> 
         <Storyboard> 

         </Storyboard> 

        </BeginStoryboard> 
       </EventTrigger> 

      </TextBox.Triggers> 

     </TextBox> 
+0

Je connais les bases de storyboards, mais le problème est de savoir comment pour commencer un storyboard, lorsque les données changent. Je pensais qu'un datatrigger pourrait m'aider. Mais je ne sais pas quelle propriété je dois mettre dans le datatrigger pour déclencher une modification et démarrer un storyboard avec l'ancienne valeur et démarrer un storyboard avec la nouvelle valeur. Le problème principal est de conserver l'ancienne valeur. – Shounbourgh

+0

Le code fonctionne-t-il correctement? ce que je voulais dire, c'est que vous pouviez voir les noms de projet "projet 1" "projet 2" "proejet 3" et ainsi de suite dans la zone de texte que vous avez défini le texte à lier? – JackyBoi

+0

Merci pour cette solution et je vois les noms dans mon ListBox. Mais cela ne dirige pas ce que je cherche pour ^^. Le TextBox ne devrait être qu'un exemple à tester. Avec la solution que vous avez publiée, je ne sais pas comment faire disparaître l'ancienne valeur du contenu changeant et l'évanouissement dans le nouveau contenu. Par exemple je change la propriété TextBox.Text qui est liée au premier élément dans DataContext. L'ancienne valeur - "Projet 1" et la nouvelle valeur - Projet abc "Le premier story-board commence à disparaître (Opacité à 0)" Projet 1 ", changer le contenu et s'évanouir dans la nouvelle valeur" projet abc "(opacité à 1 – Shounbourgh

Questions connexes