Question

J'ai un ListView, qui est défini très simplement dans mon XAML comme si

<ListView Name="myListVew" MaxHeight="200" Visibility="Collapsed">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Line" Width="Auto" DisplayMemberBinding="{Binding Line}" />
            <GridViewColumn Header="Error" Width="Auto" DisplayMemberBinding="{Binding Error}" />
        </GridView>
    </ListView.View>
</ListView>

Lorsque je veux que le ListView apparaisse, je veux animer la hauteur de la vue liste à partir de 0. Le problème est que je ne connais pas la hauteur finale du ListView, car cela dépendra du nombre d'éléments affichés à l'intérieur. il. Y a-t-il un moyen de le faire?

Était-ce utile?

La solution

Ne le détestez pas lorsque vous recherchez une solution pendant des heures, postez une question sur un forum, puis trouvez la réponse vous-même 10 minutes plus tard?

Quoi qu’il en soit, je l’ai obtenu en appliquant une transformation d’échelle de mise en page comme si

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ErrorDisplay" Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
    <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/>
</DoubleAnimationUsingKeyFrames>

Autres conseils

Ce n'est pas exactement le même scénario, mais cela peut aider quelqu'un d'autre.

J'avais une bordure d'une hauteur automatique et je voulais l'animer à une hauteur spécifique.

Ma bordure ressemblait à ceci:

<Border Name="ContainerBorder">
  <!-- Stuff... -->
</Border>

J'ai créé ce storyboard:

<Storyboard x:Key="EditIn">
  <DoubleAnimation Storyboard.TargetProperty="Height"
                   Storyboard.TargetName="ContainerBorder"
                   Name="BorderAnimation"
                   To="45"
                   Duration="0:0:0.8" />
</Storyboard>

Le bouton qui a déclenché l'animation avait un code derrière:

private void Edit_Click(object sender, RoutedEventArgs e) {
  Storyboard sb = (Storyboard)FindResource("EditIn");
  //Find the border animation
  DoubleAnimation da = (DoubleAnimation)sb.Children.Where(t => t.Name == "BorderAnimation").FirstOrDefault();
  if (da != null) { da.From = ContainerBorder.ActualHeight; }
  sb.Begin(this);
}

J'ai donc simplement trouvé la bordure et défini les "De" à & de; propriété de l'animation sur la propriété ActualHeight de FrameworkElement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top