淡出Visibility.Hidden上的WPF控件

时间:2017-05-23 17:59:15

标签: c# wpf visibility fadeout

我想使用样式来制作WPF控件(在这种情况下是来自Telerik的第三方控件,但可以是任何东西)淡出,因为它的Visibility属性更改为Hidden。我尝试使用的这种方法在将设置为Visibility.Visible之后,可以很好地淡化 in 内容。但这不是相反的方式:

<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>

我非常清楚为什么这不起作用:只要控件设置为Hidden,WPF就会停止绘制它。所以我的动画甚至可能正在播放,但它没有显示,因为Visibility.Hidden立即被应用。

问题1:我的假设是否正确?问题2:解决这个问题的好方法是什么?我可以设想一个解决方案,其中自定义属性启动淡出动画,并在完成应用实际Visibility.Hidden设置后使用回调。有更清洁的解决方案吗?

1 个答案:

答案 0 :(得分:0)

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>