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