![](/img/trans.png)
[英]I have created a combo box with data binding in WPF. I am not sure how to set value to “comboboxselecteditem”
[英]WPF. How to stop data trigger animation through binding?
在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>
也可以使用ExitAction
上的DataTrigger
停止故事板,当绑定值更改超出目标状态时,将调用它。 只需为BeginStoryboard
命名,并在StopStoryboard
操作中引用它,如下所示:
<DataTrigger.EnterActions>
<BeginStoryboard Name="your_storyboard_name">
...
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="your_storyboard_name" />
</DataTrigger.ExitActions>
这可能比启动第二个故事板以停止或屏蔽不同的故事板更合适。
你尝试过这样的事情(未经测试的例子):
<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值开始,因此它将平滑过渡。
如果您需要在后面的代码中重置动画,通常会进行以下调用:
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来通知视图有关新值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.