我有一个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的最终高度,因为它取决于里面显示的项目数量它。无论如何这样做?
答案 0 :(得分:5)
当你搜索解决方案的时间,将问题发布到论坛然后在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 :(得分:1)
这不是完全相同的情况,但它可能会帮助其他人。
我有一个高度为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。