wpf动画淡化并淡出

时间:2010-09-30 04:22:51

标签: c# wpf wpf-controls

我想在表单上显示一些数据。表格应淡入5秒,并显示完全不透明度的数据10秒,然后在3秒内开始淡出。我在c#中以编程方式执行此操作。

请提供建议或示例代码。

由于 拉朱

2 个答案:

答案 0 :(得分:1)

您可以使用DoubleAnimationUsingKeyFrames(请参阅msdn docs here中的c#用法示例)并为控件的Opacity属性设置动画。

答案 1 :(得分:0)

您可以在XAML中定义一个操纵不透明度的故事板。以下完整的XAML示例说明了这一点:

  <Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  WindowTitle="Fading Rectangle Example">
  <StackPanel Margin="10">

    <Rectangle
      Name="MyRectangle"
      Width="100" 
      Height="100"
      Fill="Blue">
    </Rectangle>

    <Button Name="BeginButton">Begin</Button>

    <StackPanel.Triggers>
      <EventTrigger RoutedEvent="Button.Click" SourceName="BeginButton">
        <BeginStoryboard Name="MyBeginStoryboard">
          <Storyboard>
            <DoubleAnimation
              Storyboard.TargetName="MyRectangle" 
              Storyboard.TargetProperty="(Rectangle.Opacity)"
              From="1.0" To="0.0" Duration="0:0:5" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
    </StackPanel.Triggers>
  </StackPanel>
</Page>

根据您的要求,也可以从C#运行动画:

public void DoAnimation()
{
  Storyboard opacityStoryboard = FindResource("MyBeginStoryboard") as Storyboard;
  opacityStoryboard.Begin(this);
}

这两种方法的组合是在XAML中定义动画并在C#中激活它。

使用此模式,您可以定义两个故事板:

  • 在五秒钟内将表单的Opacity属性从0.0更改为1.0的故事板
  • 一个故事板,可以在三秒内将表单的Opacity属性从1.0更改为0.0

您可以修改上面的示例,将其作为独立示例执行:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  WindowTitle="Fading Rectangle Example">
  <StackPanel Margin="10">

    <Rectangle
      Name="MyRectangle"
      Width="100" 
      Height="100"
      Fill="Blue">
    </Rectangle>

    <Button Name="FadeInButton">Fade In</Button>
    <Button Name="FadeOutButton">Fade Out</Button>

    <StackPanel.Triggers>
      <EventTrigger RoutedEvent="Button.Click" SourceName="FadeInButton">
        <BeginStoryboard Name="FadeInStoryboard">
          <Storyboard>
            <DoubleAnimation
              Storyboard.TargetName="MyRectangle" 
              Storyboard.TargetProperty="(Rectangle.Opacity)"
              From="0.0" To="1.0" Duration="0:0:5" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
      <EventTrigger RoutedEvent="Button.Click" SourceName="FadeOutButton">
        <BeginStoryboard Name="FadeOutStoryboard">
          <Storyboard>
            <DoubleAnimation
              Storyboard.TargetName="MyRectangle" 
              Storyboard.TargetProperty="(Rectangle.Opacity)"
              From="1.0" To="0.0" Duration="0:0:3" />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
    </StackPanel.Triggers>
  </StackPanel>
</Page>

使用上面显示的“从C#运行故事板”模式,您可以在C#代码中的适当时间运行每个故事板。