WPF.如何通过绑定来停止数据触发动画?

Bop*_*Bop 12 c# wpf binding datagrid wpfdatagrid

在WPF工具包datagrid中,我有一个数据触发器绑定到单元格元素的不透明度.

UpVisibility路径变为1时,动画开始淡化为0.哪个有效.

但是我的问题现在 - 如果我需要提前停止/取消淡入淡出并且设置UpVisibility为0,路径仍然可见并且随着任何事情的发生而消失....

如何使用MyValue对象立即将不透明度降为0?

<Path Data="M 5,0 0,10 10,10" Height="10" Width="10" Fill="Green" Opacity="{Binding MyValue[0].UpVisibility}" Margin="5,0,5,0">
    <Path.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyValue[0].UpVisibility}" Value="1.0">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:10" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Path.Style> 
</Path>
Run Code Online (Sandbox Code Playgroud)

cod*_*k3y 15

故事板也可以使用ExitActionon a 停止DataTrigger,当绑定值更改为目标状态时调用.只需给出BeginStoryboard一个名字,并在StopStoryboard动作中引用它,如下所示:

<DataTrigger.EnterActions>
    <BeginStoryboard Name="your_storyboard_name">
        ...
    </BeginStoryboard>
</DataTrigger.EnterActions>

<DataTrigger.ExitActions>
    <StopStoryboard BeginStoryboardName="your_storyboard_name" />
</DataTrigger.ExitActions>
Run Code Online (Sandbox Code Playgroud)

这可能比启动第二个故事板以停止或屏蔽不同的故事板更合适.


小智 8

你尝试过这样的事情(未经测试的例子):

<Path Data="M 5,0 0,10 10,10" Height="10" Width="10" Fill="Green" Opacity="{Binding MyValue[0].UpVisibility}" Margin="5,0,5,0">
    <Path.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyValue[0].UpVisibility}" Value="1.0">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:10" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.EnterActions>
                    <DataTrigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0.0" Duration="0:0:0" />
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Path.Style>
</Path>
Run Code Online (Sandbox Code Playgroud)

我将动画持续时间设置为0即时.如果您没有定义From属性,则指示WPF以当前DependencyProperty值开始,因此它将平滑过渡.