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

| 在WPF工具包datagrid中,我有一个绑定到单元元素不透明性的数据触发器。 当“ 0”更改为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>
    
已邀请:
您是否尝试过这样的事情(未经测试的示例):
<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>
我将动画持续时间设置为0。而且,如果您未定义From属性,则指示WPF从当前的DependencyProperty值开始,因此它将平稳过渡。     
也可以使用ѭ5上的ѭ4来停止情节提要,当绑定值更改为目标状态之外时,将调用情节提要。只需给您的
BeginStoryboard
起一个名字,然后在
StopStoryboard
动作中引用它,就像这样:
<DataTrigger.EnterActions>
    <BeginStoryboard Name=\"your_storyboard_name\">
        ...
    </BeginStoryboard>
</DataTrigger.EnterActions>

<DataTrigger.ExitActions>
    <StopStoryboard BeginStoryboardName=\"your_storyboard_name\" />
</DataTrigger.ExitActions>
这可能比启动第二个故事板来停止或掩盖其他故事板更合适。     
如果您需要在后面的代码中重置动画,通常请执行以下调用:
 MyControl.BeginAnimation(OpacityProperty, null);
但是,根据MVVM,如何在XAML中执行此操作?答案是:
<Style>
    <Style.Triggers>
        <DataTrigger Binding=\"{Binding Vanishing}\" Value=\"True\">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard TargetProperty=\"Opacity\">
                        <DoubleAnimation To=\"0\" Duration=\"0:0:0.5\" FillBehavior=\"Stop\"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard TargetProperty=\"Opacity\">
                        <DoubleAnimation To=\"{x:Null}\" Duration=\"0:0:0\"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>
要在ViewModel中调用动画,我们可以执行以下操作:
Vanishing = true;
await Task.Delay(500);
Vanishing = false;
还要确保绑定属性(在我的情况下为空)调用INotifyPropertyChanged来通知视图新值     

要回复问题请先登录注册