2009-08-07 4 views
0

Je suis nouveau à wpf et j'essaie d'apprendre quelque chose. Mon problème est: je dois lier tout ce que je veux une animation en boucle ...Lier les contrôles aux animations autonomes

Exemple:

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<StackPanel> 
    <Slider Visibility="Hidden" Minimum="0" Maximum="100" Height="22" Margin="73,40,105,0" Name="Slider1" VerticalAlignment="Top" Value="0"> 
     <Slider.Triggers> 
     <EventTrigger RoutedEvent="Slider.Loaded"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation 
         Storyboard.TargetName="Slider1" 
         Storyboard.TargetProperty="Value" 
         From="0" To="100" Duration="0:0:5" 
         AutoReverse="True" RepeatBehavior="Forever" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
      </Slider.Triggers> 
    </Slider> 
    <Slider Minimum="0" Maximum="100" Height="22" Margin="72,98,106,0" Name="Slider2" VerticalAlignment="Top" Value="{Binding ElementName=Slider1, Path=Value}"/> 
    <Button Width="{Binding ElementName=Slider1, Path=Value}"></Button> 
</StackPanel> 

Slider1 est caché et agir comme une source pour Slider2 et ButtonWidth. Comme un oscillateur autonome. J'ai besoin d'un moyen d'éliminer slider1 et de lier directement à une animation autonome qui boucle. C'est possible? Merci d'avance :)

Répondre

1

Pourquoi ne pas simplement animer la valeur Slider2 de la même manière que vous avez animé la valeur de Slider1? Vous pouvez également animer la largeur du bouton. Je ne sais pas pourquoi vous auriez besoin de Slider1 en premier lieu. Le balisage suivant montre comment supprimer Slider1 et en utilisant l'animation comme ressource:

<Window.Resources> 
    <DoubleAnimation x:Key="ValueAnimation" 
         Storyboard.TargetProperty="Value" 
         From="0" To="100" Duration="0:0:5" 
         AutoReverse="True" RepeatBehavior="Forever" /> 
</Window.Resources> 
<StackPanel> 
    <Slider Minimum="0" Maximum="100" Height="22" Margin="72,98,106,0" 
      Name="Slider2" VerticalAlignment="Top"> 
     <Slider.Triggers> 
      <EventTrigger RoutedEvent="Slider.Loaded"> 
       <BeginStoryboard> 
        <Storyboard Storyboard.TargetName="Slider2"> 
         <StaticResource ResourceKey="ValueAnimation"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Slider.Triggers> 
    </Slider> 
    <Button Width="{Binding ElementName=Slider2, Path=Value}"/> 
</StackPanel> 

Vous pouvez supprimer le TargetProperty de ValueAnimation et préciser que par l'animation, aussi bien. Cela vous permettrait d'utiliser une seule animation pour Button.Width et Slider.Value.

0

Merci pour votre réponse :)

Pourquoi ne pas vous animez simplement la valeur Slider2 de la même façon que vous avez animés de la valeur Slider1?

parce que je dois centraliser les valeurs d'animation pour le partager sur plusieurs objets (non seulement un autre curseur) et, de cette façon, je peux modifier les valeurs en 1 lieu seulement :)

Merci votre exemple convient bien :)

Questions connexes