WPF 数据触发器导致加载动画时闪烁



我有一个数据触发器,它设置为假隐藏带有动画的相关控件。现在,当加载屏幕时,属性的值已经为假,它仍然运行动画并淡化控件,从而隐藏它们。

它导致屏幕上出现短暂的闪烁。

我希望这些控件在屏幕上保持隐藏状态,直到我将属性设置为 true。

<Window.Resources>
<Style x:Key="somestyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding IsControlVisible,UpdateSourceTrigger=PropertyChanged}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:1.5"  Storyboard.TargetProperty="Opacity" To="0" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:1.5"  Storyboard.TargetProperty="Opacity" To="1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel VerticalAlignment="Center">
<Button Width="100" Height="50" Content="Toggle Visibiity" Click="Button_Click"/>
<Button Width="200" Height="50" Content="Something Something" Margin="0 20 0 0" Style="{StaticResource somestyle}"/>
</StackPanel>

问题是,当加载控件并应用样式时,将计算触发器,并且由于最初IsControlVisiblefalse,因此启动第一个情节提要,将Opacity从 1(默认值(动画化为 0。因此,解决方案是将初始Opacity值设置为 0(或者更好的是,设置为对应于初始值IsControlVisible的值(。要做到这一点,在你的风格中添加一个合适的二传手就足够了:

<Style x:Key="somestyle" TargetType="Button">
<Setter Property="Opacity" Value="{Binding IsControlVisible, Mode=OneTime}" />
(...)
</Style>

建议将绑定模式设置为OneTime,以便在以后更改IsControlVisible的值时,Opacity仅由动画控制,而不由绑定控制。另外,我没有使用任何转换器,但事实证明,该框架足够智能,可以将bool正确转换为double

最新更新