如何:对元素或画笔的不透明度进行动画处理

若要使框架元素淡入和淡出视图,可以对其Opacity属性执行动画处理,也可以对用于绘制它的Opacity(或画笔)的属性Brush执行动画处理。 对元素的不透明度进行动画处理会使元素及其子元素淡入和淡出视图,但对用于绘制元素的画笔进行动画处理,可以更选择性地了解元素的哪个部分淡出。 例如,你可以对用于绘制按钮背景的画笔的不透明度进行动画处理。 这将导致按钮的背景淡入和淡出视图,同时使其文本完全不透明。

注释

OpacityBrush进行动画处理的性能优势高于对元素进行Opacity属性动画处理。

在以下示例中,为两个按钮制作动画,以便它们淡入和淡出界面。 第一个Button的不透明度以1.0起始动画变化至0.0,整个过程历时五秒。 第二个按钮也有动画效果,但用于绘制其 Background 的 SolidColorBrush 的不透明度是有动画效果的,而不是按钮整体的不透明度。 运行示例时,第一个按钮完全淡入和淡出视图,而只有第二个按钮的背景淡入和淡出视图。 其文本和边框仍然完全不透明。

示例:

<!-- OpacityAnimationExample.xaml
     This example shows how to animate the opacity of objects, 
     making them fade in and out of view. -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  WindowTitle="Opacity Animation Example" Background="White">
  <StackPanel Margin="20">

    <!-- Clicking this button animates its opacity. -->
    <Button Name="opacityAnimatedButton">
      A Button
      <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation 
                Storyboard.TargetName="opacityAnimatedButton"
                Storyboard.TargetProperty="(Button.Opacity)" 
                From="1" To="0" Duration="0:0:5" AutoReverse="True"  /> 
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Button.Triggers>
    </Button>

    <!-- Clicking this button animates the opacity of the brush
         used to paint its background. -->
    <Button>
      A Button
      <Button.Background>
        <SolidColorBrush x:Name="MyAnimatedBrush" Color="Orange" />
      </Button.Background>
      <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation 
                Storyboard.TargetName="MyAnimatedBrush"
                Storyboard.TargetProperty="(Brush.Opacity)" 
                From="1" To="0" Duration="0:0:5" AutoReverse="True"  />  
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Button.Triggers>         
    </Button>
  </StackPanel>
</Page>

此示例中已省略代码。 完整示例还演示如何对内部ColorLinearGradientBrush不透明度进行动画处理。 有关完整示例,请参阅 元素不透明度动画示例