我有一个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的最终高度,因为它取决于里面显示的项目数量它。无论如何这样做?

有帮助吗?

解决方案

当你搜索解决方案的时间,将问题发布到论坛然后在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>

其他提示

这不是完全相同的情况,但可能有助于其他人。

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

所以,我只是找到了边框并设置了“来自”。动画的属性为FrameworkElement的ActualHeight。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top