代码之家  ›  专栏  ›  技术社区  ›  Martin Moser

如何动态筛选显示在项控件(WPF)中的项

  •  0
  • Martin Moser  · 技术社区  · 15 年前

    我目前正在创建一个控件,它主要是 ItemsControl 显示一些项目。 此外,我还有一些控件,允许用户筛选其中的项 项目控制 .

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

    所以我所做的不是真正过滤 ICollectionView ,我介绍了一个新的物业 IsVisible 在用于每个项目的虚拟机上。 然后我添加了一个 ScaleTransform 作为 LayoutTransform DataTemplate 我加了一个 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 再次应用,但用户确实筛选了任何内容。

    原因是,列表更改后, 数据板 将重新创建,scaley为“1”,然后 数据管理器 再次应用,记分板再次应用。

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

    你知道怎么做吗? 蒂亚 马丁

    1 回复  |  直到 13 年前
        1
  •  0
  •   Dave Clemmer manu    13 年前

    我找到了一个适合我的解决方案。 我现在正在创建 ScaleTransform 在我的虚拟机中,并将其绑定到 LayoutTransform DataTemplate . 因此,对象始终保持不变,并且一旦 数据板 被重新创造。