【问题标题】:WPF: Animate Height of ListView when final height is unknownWPF:最终高度未知时ListView的动画高度
【发布时间】:2023-03-19 15:30:02
【问题描述】:

我有一个 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 的最终高度,因为它取决于里面显示了多少项目它。有没有办法做到这一点?

【问题讨论】:

    标签: .net wpf listview animation


    【解决方案1】:

    您不讨厌花费数小时寻找解决方案,将问题发布到论坛,然后在 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>
    

    【讨论】:

    • 这可能会让您满意,但它真的回答了您最初的问题吗?我以为您想增加控件的高度,但不要在这样做时缩放其内容。
    • 我同意 Mal ... scale 在某些情况下有效,但不是全部。我仍然希望得到您最初问题的答案。
    • @ChrisNicol 我认为你可以有一个双动画,你没有为 To 属性指定任何东西。
    【解决方案2】:

    这不是完全相同的场景,但它可能对其他人有所帮助。

    我有一个高度为 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);
    }
    

    所以,我只是简单地找到了边框并将动画的“From”属性设置为 FrameworkElement 的 ActualHeight。

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2017-06-17
      • 1970-01-01
      • 2015-08-20
      相关资源
      最近更新 更多