c#wpf在可见性触发器

时间:2017-04-11 09:22:04

标签: c# wpf animation styles

我正在创建一个包含动画的样式,然后可以将其继承到特定的控件样式,这些样式会自动应用。

实际上我正在努力实现一个简单的动画:

  • Visibility更改为Visible时,Opacity从0更改为1
  • Visibility更改为visible之外的其他内容时,Opacity正在做相反的事情

到目前为止,我得到了:

<Style x:Key="BaseAnimationsStyle">
    <Style.Triggers>
        <Trigger Property="FrameworkElement.Visibility" Value="Visible">
            <Trigger.EnterActions> <!-- this works -->
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.5" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions><!-- this doesn't -->
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.5" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>
        </Trigger>
    </Style.Triggers>
</Style>

如果在控件上设置了上述样式,则它具有以下行为:

当控件的Visibility设置为Visible时,转换工作正常,意味着它正在淡入。

问题: 当控件的Visibility设置为Hidden(或甚至Collapsed)时,控件将立即隐藏而不会褪色。

我的猜测是,有一些默认行为可以覆盖FrameworkElement处理可见性变化的方式。

2 个答案:

答案 0 :(得分:1)

Visibility属性设置为CollapsedHidden会使元素立即隐藏,但您可以设置Visibility属性,而不是设置Opacity属性。然后设置$('.footer').scrollToFixed( { bottom: 0, limit: $('.footer').offset().top, }); 属性的动画以淡出元素。有关更多信息和示例,请参阅以下链接。

WPF:如何动画可见性属性?: http://blogs.microsoft.co.il/arik/2010/02/08/wpf-how-to-animate-visibility-property/

WPF Fade Animation

答案 1 :(得分:0)

我已经用@ mm8的答案提供的信息解决了我的问题。

基本上我将VisibilityAnimation类添加到我的项目中。然后我使用Setter中提供的附加属性创建我的Base-Style。

<!-- Animations -->
<Style x:Key="BaseAnimationsStyle">
    <Setter Property="anim:VisibilityAnimation.AnimationType" Value="Fade" />
</Style>


<!-- This adds the Visibility Animation to every Grid which has access to this resource -->
<Style TargetType="{x:Type Grid}" BasedOn="{StaticResource BaseAnimationsStyle}" />