【问题标题】:HowTo animate filtering of items displayed in an ItemsControl (WPF)如何动画过滤 ItemsControl (WPF) 中显示的项目
【发布时间】:2011-01-15 04:31:21
【问题描述】:

我目前正在创建一个控件,该控件主要只是一个 ItemsControl 显示一些项目。 此外,我还有一些控件允许用户过滤 ItemsControl 中的项目。

我要做的是让用户更好地看到应用过滤器时删除了哪些项目。

所以我所做的不是真正过滤ICollectionView,而是在用于每个项目的VM 上引入了一个新属性IsVisible。 然后我在DataTemplate 中添加了ScaleTransform 作为LayoutTransform,并添加了DataTrigger 来为变换设置动画:

<Style x:Key="FilterCollapse" TargetType="{x:Type StackPanel}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsVisible}" Value="False">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         To="0"
                                         Duration="0:0:0.5"/>
                        <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY"
                                         To="0"
                                         BeginTime="0:0:0.0"
                                         Duration="0:0:0.5"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY"
                                         To="1"
                                         Duration="0:0:0.5"/>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity"
                                         To="1"
                                         BeginTime="0:0:0.5"
                                         Duration="0:0:0.5"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

<DataTemplate x:Key="MyTemplate">
    <StackPanel Style="{StaticResource FilterCollapse}">
        <StackPanel.LayoutTransform>
            <ScaleTransform ScaleX="1" ScaleY="1"/>
        </StackPanel.LayoutTransform>

如果用户现在过滤一切正常。 但我遇到的问题是,如果列表中的任何更改(添加新项目,...)Storyboard 再次应用,尽管用户确实过滤了任何内容。

原因是,列表更改后,DataTemplate 将重新创建,ScaleY 为“1”,然后再次应用 DataTrigger,再次应用记分牌。

在这种情况下,我希望不发生动画。

任何想法如何做到这一点? 蒂亚 马丁

【问题讨论】:

    标签: wpf animation datatemplate itemscontrol datatrigger


    【解决方案1】:

    我找到了适合我的解决方案。 我现在在我的 VM 中创建 ScaleTransform,并将其绑定到来自 DataTemplateLayoutTransform。因此,对象始终保持不变,并且在重新创建 DataTemplate 后不会失去其价值。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 1970-01-01
      • 2013-06-03
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多