Domanda

Ho un ListView, che è definito in modo molto semplice nel mio XAML in questo modo

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

Quando voglio che ListView appaia, voglio animare l'altezza della visualizzazione elenco da 0. Il problema è che non conosco l'altezza finale di ListView poiché dipenderà dal numero di elementi mostrati all'interno esso. Esiste un modo per farlo?

È stato utile?

Soluzione

Non lo odi quando cerchi ore per trovare una soluzione, pubblica una domanda in un forum e trova la risposta tu stesso 10 minuti dopo?

Comunque, l'ho fatto funzionare applicando una trasformazione della scala del layout in questo modo

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

Altri suggerimenti

Questo non è esattamente lo stesso scenario ma può aiutare qualcun altro.

Avevo un bordo che aveva un'altezza di Auto e volevo che si animasse a un'altezza specifica.

Il mio bordo sembrava così:

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

Ho creato questo storyboard:

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

Il pulsante che ha attivato l'animazione aveva un po 'di codice dietro:

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

Quindi, ho semplicemente trovato il bordo e impostato " Da " proprietà dell'animazione per ActualHeight di FrameworkElement.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top