Pregunta

Tengo un ListView, que se define muy simplemente en mi XAML como tal

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

Cuando quiero que aparezca ListView, quiero animar la altura de la vista de lista desde 0. El problema es que no sé la altura final de ListView ya que dependerá de cuántos elementos se muestren dentro eso. ¿Hay alguna forma de hacer esto?

¿Fue útil?

Solución

¿No lo odias cuando buscas por horas una solución, publicas una pregunta en un foro y luego encuentras la respuesta 10 minutos después?

De todos modos, lo puse en funcionamiento al aplicar una transformación de escala de diseño como tal

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

Otros consejos

Este no es exactamente el mismo escenario pero puede ayudar a otra persona.

Tenía un borde que tenía una altura de Auto y quería que se animara a una altura específica.

Mi borde se veía así:

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

He creado este guión gráfico:

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

El botón que activó la animación tenía algo de código:

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);
}

Entonces, simplemente encontré el borde y configuré el " Desde " propiedad de la animación a ActualHeight de FrameworkElement.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top