C# 无Dispatchermer的Silverlight动画

C# 无Dispatchermer的Silverlight动画,c#,animation,silverlight-3.0,C#,Animation,Silverlight 3.0,我正在尝试用Silverlight学习一些基本的动画。我在尝试创建一个弹性矩形 挑战是:我希望在没有Dispatchermer的情况下创建它。您能帮助我使用XAML和C#code吗?由于Silverlight的特性,任何与用户界面的交互都将在某个时候使用调度程序,并且由于动画的特性,必须使用计时器来制作动画。任何标准Silverlight动画都将使用Dispatchermer来实现这一点。您可以使用自己的计时器和动画框架来提供动画,但这并没有多大意义 使用XAML的Silverlight动画 通

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


挑战是:我希望在没有Dispatchermer的情况下创建它。您能帮助我使用XAML和C#code吗?

由于Silverlight的特性,任何与用户界面的交互都将在某个时候使用
调度程序,并且由于动画的特性,必须使用计时器来制作动画。任何标准Silverlight动画都将使用
Dispatchermer
来实现这一点。您可以使用自己的计时器和动画框架来提供动画,但这并没有多大意义

使用XAML的Silverlight动画 通过使用元素和子
*Animation
元素(,或),只能使用XAML创建动画

一个简单的例子可能是淡入或淡出视图()控件:

此示例在单击
矩形
时设置
堆栈面板
不透明度的动画,导致
堆栈面板
反复淡入淡出。通过设置其他属性(如
宽度
高度
)的动画,可以创建更复杂的动画,包括使用和

弹性矩形

要开始解决特定问题,可以指定一个仅包含一个点(即矩形的角点)和一个点的动画。然后,在释放鼠标按钮时,您可以启动故事板动画,并且给定适当的值,您应该可以获得所需的效果

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

其他资源
网上有很多资源可以学习更多关于Silverlight动画的信息。A获得以下结果:


1)查找Silverlight动画-您可以定义详细的故事板,运行时将自行执行这些故事板。2) 在幕后,内置机制只是使用一个分派器。我不知道你为什么要避免。。。。它必须是一个“调度器”才能修改UI线程上的内容,它必须是一个“计时器”,因为动画就是这样工作的。你能解释一下为什么要避免这种情况吗?目的是减少C#编码,并在XAML中完成大部分工作。如果你能分享代码那就太好了,因为我只是一个初学者。我认为他想要实现的动画(弹性矩形)最好是从代码中完成的,因为它取决于鼠标位置(拖动圆圈的位置)。你不这么认为吗?@AbdouMoumen:我已经更新了我的答案。我相信这一切都可以在XAML中完成,除了动画的触发器,它可以在一个简单的事件处理程序中完成——但是,我自己还没有尝试过。可能需要更多的C#代码,但我认为XAML和代码的结合可能是最好的。
<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>
private void Mouse_Clicked(object sender, MouseEventArgs e)
{
    myStoryboard.Begin();
}