2009-04-30 11 views
3

ich ein Listview haben, dass es sehr einfach, wie so in meiner XAML definiert istWPF: Höhe des Listview Animieren, wenn Endhöhe unbekannt ist

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

Als ich das Listview angezeigt werden soll, möchte ich die Höhe animieren der Listenansicht von 0. Das Problem ist, ich weiß nicht die endgültige Höhe der ListView, da es darauf ankommt, wie viele Elemente darin angezeigt werden. Gibt es das überhaupt?

Antwort

5

Sie nicht hasst es, wenn man stundenlang nach einer Lösung suchen, auch eine Frage in ein Forum und dann die Antwort selbst 10 Minuten später finden?

Wie dem auch sei, ich habe es funktioniert, indem eine Layout-Skala Transformation wie so die Anwendung

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

Dies könnte Sie zufriedenstellen, aber beantwortet es wirklich Ihre ursprüngliche Frage? Ich dachte, Sie wollten die Höhe des Steuerelements erhöhen, aber seinen Inhalt nicht skalieren, während Sie dies tun. –

+0

Ich stimme mit Mal ... Skala funktioniert in bestimmten Szenarien, aber nicht alle. Ich möchte immer noch eine Antwort auf Ihre ursprüngliche Frage erhalten. –

+0

@ChrisNicol Ich denke, Sie können einfach eine doppelte Animation haben, wo Sie nichts für die Eigenschaft An angeben. – Ray

1

Dies ist das gleiche Szenario nicht genau, aber es kann jemand anders helfen.

Ich hatte eine Grenze, die eine Höhe von Auto hatte, und ich wollte es auf eine bestimmte Höhe animieren.

Meine Grenze sah wie folgt aus:

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

ich dieses Drehbuch erstellt:

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

die Schaltfläche, die die Animation ausgelöst einige Code-Behind hatte:

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

Also, ich einfach habe den Rahmen gefunden und die "From" -Eigenschaft der Animation auf ActualHeight des FrameworkElements gesetzt.

Verwandte Themen