2009-08-14 13 views
4

Je souhaite avoir un déclencheur sur une image qui se développe et contracte une ItemsSource en animant sa propriété height.Animation WPF pour étendre la hauteur du contrat

J'ai un ItemsSource générique lié à une ObservableCollection, donc je ne connais pas la hauteur totale de ce contrôle.

Une fois que l'image est cliquée, elle doit changer son glyphe de source d'image pour montrer que la source d'éléments est étendue. Une fois de nouveau cliqué, ItemsSource devrait commencer à se contracter de en cours hauteur de retour à 0 - parce que la première animation peut ne pas être terminée.

Actuellement, j'ai le déclencheur d'image:

<Image Name="ExpandImage" Source="ArrowDown.png"> 
      <Image.Triggers> 
       <EventTrigger RoutedEvent="Image.MouseLeftButtonDown"> 
        <EventTrigger.Actions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Height"              
              Storyboard.TargetName="myItemsControl" 
              From="0" To="300" Duration="0:0:2" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger.Actions> 
       </EventTrigger> 
      </Image.Triggers> 
     </Image> 

C'est laid parce qu'il anime à une hauteur fixe - je en ai besoin pour animer à la (hauteur inconnue) totale du ItemsControl. En outre, il prend uniquement en charge l'animation unidirectionnelle (en expansion).

Mon ItemsControl est tout simplement:

<ItemsControl Name="myItemsControl" 
     ItemsSource="{Binding Items}" Height="0" > 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <c:CustomUserControl/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Répondre

1

Vous pouvez obtenir la hauteur réelle des éléments de commande avec le ... eh bien, la propriété ActualHeight. Le problème est que ce n'est pas une propriété de dépendance. Cependant, vous pouvez vous lier en utilisant un comportement joint comme Kent Boogaart l'a fait au this answer.

Cela devrait vous permettre de vous lier à la hauteur réelle. Je vous laisse le soin d'écrire le comportement ci-joint. :)

Questions connexes