在 Visibility.Hidden 上淡出 WPF 控件
Fading out a WPF control on Visibility.Hidden
我想使用样式使 WPF 控件(在本例中是来自 Telerik 的第 3 方控件,但可以是任何东西)淡出,因为它的可见性 属性 更改为隐藏。我尝试使用的这种方法在 in 内容设置为 Visibility.Visible 后效果很好。但这并不适用于相反的方式:
<Style x:Key="FadeoutStyle" TargetType="telerik:RadDiagramShape">
<Style.Triggers>
<Trigger Property="Visibility" Value="Hidden">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
我很确定为什么这不起作用:一旦控件设置为隐藏,WPF 就会停止绘制它。所以我的动画甚至可能正在播放,但它没有显示,因为 Visibility.Hidden 立即得到应用。
问题一:我的假设是否正确?问题 2:解决这个问题的好模式是什么?我可以想象一个解决方案,其中自定义 属性 启动淡出动画并在完成后使用应用实际 Visibility.Hidden 设置的回调。有更清洁的解决方案吗?
Visibility.Hidden 抛开问题不谈,最终证明是我错误地使用了触发器。我的工作版本(使用不同的 属性)如下所示:
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
我想使用样式使 WPF 控件(在本例中是来自 Telerik 的第 3 方控件,但可以是任何东西)淡出,因为它的可见性 属性 更改为隐藏。我尝试使用的这种方法在 in 内容设置为 Visibility.Visible 后效果很好。但这并不适用于相反的方式:
<Style x:Key="FadeoutStyle" TargetType="telerik:RadDiagramShape">
<Style.Triggers>
<Trigger Property="Visibility" Value="Hidden">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
我很确定为什么这不起作用:一旦控件设置为隐藏,WPF 就会停止绘制它。所以我的动画甚至可能正在播放,但它没有显示,因为 Visibility.Hidden 立即得到应用。
问题一:我的假设是否正确?问题 2:解决这个问题的好模式是什么?我可以想象一个解决方案,其中自定义 属性 启动淡出动画并在完成后使用应用实际 Visibility.Hidden 设置的回调。有更清洁的解决方案吗?
Visibility.Hidden 抛开问题不谈,最终证明是我错误地使用了触发器。我的工作版本(使用不同的 属性)如下所示:
<Trigger Property="IsEnabled" Value="False">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>