可见性淡出和淡出无限循环
Visibility fadeout and fade in infinite loop
我有一些 Grid
里面有一些元素,我想给它添加一些淡入淡出效果 Visibility
属性 无限循环基于一些 bool
property
。
这是我试过的:
<Grid.Style>
<Style TargetType="FrameworkElement">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Opacity" Value="0"/>
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0.0"
To="1.0"
Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
目前我根本看不到我的Grid
。
你的风格有几个问题:
- 您没有看到
Grid
,因为您将初始Opacity
设置为0
。
- 您可以删除两个
Setter
,因为它们是默认值
- 让触发器依赖于
Visibility
是行不通的,因为当它设置为Collapsed
时,Grid
已经不可见了,所以连动画都不可见。
- 没有使
Grid
再次淡入的退出操作。
您可以通过公开用作动画触发器的 属性(此处为 MyAnimationTriggerProperty
)来解决问题。根据您的实际应用,这也可能是另一个控件的 IsChecked
状态。然后你可以添加一个ObjectAnimationUsingKeyFrames
来设置动画结束时的Visibility
。
<Style TargetType="FrameworkElement">
<Style.Triggers>
<DataTrigger Binding="{Binding MyAnimationTriggerProperty}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="1.0"
To="0.0"
Duration="0:0:0.2"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0.0"
To="1.0"
Duration="0:0:0.2"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
我有一些 Grid
里面有一些元素,我想给它添加一些淡入淡出效果 Visibility
属性 无限循环基于一些 bool
property
。
这是我试过的:
<Grid.Style>
<Style TargetType="FrameworkElement">
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Opacity" Value="0"/>
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0.0"
To="1.0"
Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
目前我根本看不到我的Grid
。
你的风格有几个问题:
- 您没有看到
Grid
,因为您将初始Opacity
设置为0
。 - 您可以删除两个
Setter
,因为它们是默认值 - 让触发器依赖于
Visibility
是行不通的,因为当它设置为Collapsed
时,Grid
已经不可见了,所以连动画都不可见。 - 没有使
Grid
再次淡入的退出操作。
您可以通过公开用作动画触发器的 属性(此处为 MyAnimationTriggerProperty
)来解决问题。根据您的实际应用,这也可能是另一个控件的 IsChecked
状态。然后你可以添加一个ObjectAnimationUsingKeyFrames
来设置动画结束时的Visibility
。
<Style TargetType="FrameworkElement">
<Style.Triggers>
<DataTrigger Binding="{Binding MyAnimationTriggerProperty}" Value="False">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="1.0"
To="0.0"
Duration="0:0:0.2"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0.2" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0.0"
To="1.0"
Duration="0:0:0.2"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>