繁体   English   中英

WPF-DataTrigger动画不起作用

[英]WPF - DataTrigger animation doesn't work

所以我正在尝试从附加到ObservableCollectio<Item> ItemsControl移除项目的过程中制作一些动画,我知道我在卸载事件中无法执行此操作,因为现在执行任何动画都为时已晚,所以我尝试执行此操作使用DataTrigger

我的xaml文件如下所示:

 <DataTemplate DataType="{x:Type MyApp:Item}">
        <Border x:Name="ItemBorder">
            <Label Content="{Binding Path=Name}" />
        </Border>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=Removing}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Duration="0:0:1" From="1.0" To="0.0"
                                           Storyboard.TargetProperty="(Border.Opacity)" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </DataTemplate.Triggers>
</DataTemplate>

我的Item类很简单:

public class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private bool removing;
    public bool Removing {
        get
        {
            return removing;
        }
        set
        {
            removing = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Removing"));
        }
    }

    // same with `Name` property
}

我想通过设置item.Removing = true开始动画,但是什么也没发生。

我究竟做错了什么?

您将必须按照以下方式更新动画,即指定元素名称:

              <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding Removing}" Value="True">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Duration="0:0:1" From="1.0" To="0.0"
                                           Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ItemBorder" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </DataTrigger.EnterActions>

                        </DataTrigger>
             </DataTemplate.Triggers>

要么

尝试将动画直接放在边框样式上,如下所示:

<DataTemplate DataType="{x:Type MyApp:Item}">
    <Border x:Name="ItemBorder">
        <Label Content="{Binding Path=Name}" />
        <Border.Style>
           <Style TargetType="Border">
              <Style.Triggers>
                 <DataTrigger Binding="{Binding Path=Removing}" Value="True">
                    <DataTrigger.EnterActions>
                      <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Duration="0:0:1" From="1.0" To="0.0"
                                           Storyboard.TargetProperty="Opacity" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger> 
          <Style.Triggers>
        </Style>         
</DataTemplate>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM