我有一个数据触发器,设置为false时隐藏带动画的相关控件。现在,当加载屏幕时,属性的值已经为假,它仍会运行动画并淡化控件,从而隐藏它们。
它会在屏幕上短暂闪现。
我希望这些控件在屏幕上保持隐藏,直到我将属性设置为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>
答案 0 :(得分:1)
问题在于,当加载控件并应用样式时,将评估触发器,并且由于最初IsControlVisible
为false
,因此启动第一个故事板,为{{1}设置动画从1(默认值)到0.因此解决方案是将初始Opacity
值设置为0(或者更好的是,将值设置为与Opacity
的初始值对应的值)。要做到这一点,只需在您的样式中添加适当的setter就足够了:
IsControlVisible
建议将绑定模式设置为<Style x:Key="somestyle" TargetType="Button">
<Setter Property="Opacity" Value="{Binding IsControlVisible, Mode=OneTime}" />
(...)
</Style>
,以便在OneTime
的值稍后更改时,IsControlVisible
仅由动画而不是绑定控制。此外,我没有使用任何转换器,但事实证明该框架非常智能,可以正确地将Opacity
转换为bool
。