WPF: анимация высоты ListView, когда конечная высота неизвестна - PullRequest
3 голосов
/ 30 апреля 2009

У меня есть ListView, который очень просто определяется в моем XAML, например:

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

Когда я хочу, чтобы ListView появился, я хочу анимировать высоту представления списка от 0. Проблема в том, что я не знаю конечную высоту ListView, поскольку она будет зависеть от того, сколько элементов показано внутри Это. Есть ли способ сделать это?

Ответы [ 2 ]

5 голосов
/ 30 апреля 2009

Разве вы не ненавидите, когда часами ищете решение, разместите вопрос на форуме, а потом найдете ответ самостоятельно через 10 минут?

Во всяком случае, я заработал, применив преобразование масштаба макета, вот так

<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>
1 голос
/ 16 августа 2012

Это не совсем тот же сценарий, но он может помочь кому-то еще.

У меня была граница с высотой Auto, и я хотел, чтобы она анимировалась до определенной высоты.

Моя граница выглядела так:

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

Я создал эту раскадровку:

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

Кнопка, запускающая анимацию, имела некоторый код:

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

Итак, я просто нашел границу и установил свойство «От» анимации в ActualHeight FrameworkElement.

...