c# - 没有 DispatcherTimer 的 Silverlight 动画

标签 c# animation silverlight-3.0

我正在尝试使用 Silverlight 学习一些基本动画。我试图创建一个弹性矩形

挑战是:我希望在没有 DispatcherTimer 的情况下创建它。您能帮我处理 XAML 和 C# 代码吗?

最佳答案

由于 Silverlight 的性质,与用户界面的任何交互都会在某个时刻使用Dispatcher,并且由于动画的性质,必须使用计时器来制作动画。任何标准 Silverlight 动画都将使用 DispatcherTimer 来实现此目的。您可以使用自己的计时器和动画框架来提供动画,但这没有多大意义。

使用 XAML 的 Silverlight 动画
可以通过使用 Storyboard 仅使用 XAML 创建动画元素和子 *Animation 元素( DoubleAnimationPointAnimationColorAnimation )。

一个简单的示例可能是淡入或淡出 View ( taken from MSDN ):

<UserControl x:Class="animation_ovw_intro.Page"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  Width="400" Height="300">

  <StackPanel>
    <StackPanel.Resources>
      <!-- Animates the rectangle's opacity. -->
      <Storyboard x:Name="myStoryboard">
        <DoubleAnimation
          Storyboard.TargetName="MyAnimatedRectangle"
          Storyboard.TargetProperty="Opacity"
          From="1.0" To="0.0" Duration="0:0:1" 
          AutoReverse="True" 
          RepeatBehavior="Forever" />
       </Storyboard>
    </StackPanel.Resources>
    <TextBlock Margin="10">Click on the rectangle to start the animation.</TextBlock>

    <Rectangle MouseLeftButtonDown="Mouse_Clicked"
      x:Name="MyAnimatedRectangle"
      Width="100" Height="100" Fill="Blue" />

  </StackPanel>
</UserControl>

使用此 C# 来连接事件:

private void Mouse_Clicked(object sender, MouseEventArgs e)
{
    myStoryboard.Begin();
}

此示例在单击 Rectangle 时对 StackPanel 的不透明度进行动画处理,从而导致 StackPanel 反复淡入和淡出。可以通过设置其他属性(例如 WidthHeight)的动画来构建更复杂的动画,包括使用 easing functionskey frames .

弹性矩形
为了帮助您开始解决特定问题,您可以仅使用 To 指定动画。点(即矩形的角)和 easing function that will create the bouncing effect 。然后,在释放鼠标按钮时,您可以启动 Storyboard动画,并且给定适当的值,您应该获得您正在寻找的效果。

但是,您可能会遇到一些困难,具体取决于矩形形状的哪些属性是读/写还是只读,因为这会影响您可以制作动画的内容。这些问题的可能解决方案是更改动画属性(您可能需要比 XAML 更多的代码)或更改动画对象的定义方式。

其他资源
在线有许多资源可用于了解有关 Silverlight 动画的更多信息。一个quick search获得这些结果:

关于c# - 没有 DispatcherTimer 的 Silverlight 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882897/

相关文章:

collections - 在Silverlight 2中渲染 View 模型的异构集合

c# - LiveCharts 基础知识——如何画线?

c# - COM 异常 0x8004005

animation - Flutter - 如何在 StreamBuilder 中使用 FadeTransition?

python - 来自几张图片的动画 Sprite

android - 向集群标记添加动画?

Silverlight:绑定(bind)到静态值

c# - Mongodb C# 驱动程序仅返回数组中匹配的子文档

c# - 取消 session 的事件?

silverlight-3.0 - 如何使用 VisualStateManager 返回 "Base"状态?