0

我有一些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的。

4

1 回答 1

0

你的风格有几个问题:

  • 您看不到Grid,因为您将初始设置Opacity0
  • 您可以删除两个Setters,因为它们是默认值
  • 使触发器依赖于Visibility不起作用,因为当它设置为时CollapsedGrid已经是不可见的,所以动画甚至不可见。
  • 没有退出动作可以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>
于 2020-11-24T12:49:41.557 回答