为什么它不应该按照应有的方式工作?没有运动....下面是代码:
namespace MovingBox
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Storyboard myStoryboard = new Storyboard();
public MainWindow()
{
InitializeComponent();
}
private void Start_Animation(object sender, EventArgs e)
{
myStoryboard.Begin();
}
private void MyAnimatedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
Start_Animation(sender, e);
}
}
}
XAML:
<Window x:Class="MovingBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<StackPanel.Resources>
<Storyboard x:Name="myStoryboard" x:Key="myStoryboardKey">
<DoubleAnimation
Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</StackPanel.Resources>
<Rectangle Loaded="Start_Animation" x:Name="MyAnimatedRectangle"
Width="100" Height="100" Fill="Blue" MouseDown="MyAnimatedRectangle_MouseDown" />
</StackPanel>
</Grid>
答案 0 :(得分:2)
我总是尽量避免使用code-behind
(使用C#
代替XAML
),而我宁愿这样做。我不确定它是否具有您想要的确切行为,但如果您有任何问题,请随时发表评论。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<Rectangle x:Name="MyAnimatedRectangle"
Width="100" Height="100" Fill="Blue">
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Rectangle.MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity"
From="1" To="0" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
</StackPanel>
</Grid>
</Window>
这也可能有用: http://msdn.microsoft.com/en-us/library/ms742868.aspx
答案 1 :(得分:2)
问题是您只能通过分配x:Name来访问代码中的资源。在您所做的事情背后的代码中,您创建了一个新的Storyboard。您尚未在StackPanel的资源内分配任何现有的故事板。
要运行此命令,只需在代码中命名stackpanel,然后将资源分配给storybard并使用它
<StackPanel x:Name="test">
<StackPanel.Resources>
<Storyboard x:Name="myStoryboard" x:Key="myStoryboardKey">
<DoubleAnimation Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:5"
AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</StackPanel.Resources>
<Rectangle Loaded="Start_Animation"
x:Name="MyAnimatedRectangle"
Width="100" Height="100"
Fill="Blue" Opacity="1"
MouseDown="MyAnimatedRectangle_MouseDown" />
</StackPanel>
代码:
myStoryboard = test.Resources["myStoryboardKey"] as Storyboard;
myStoryboard.Begin();
答案 2 :(得分:1)
您在Start_Animation方法中引用的myStoryBoard与XAML中的不同。
这是一个搜索故事板资源的工作版本:
请注意,我删除了Storyboard myStoryboard = new Storyboard();
private void MyAnimatedRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
PlayMyStoryboard(sender as FrameworkElement);
}
private void PlayMyStoryboard(FrameworkElement sender)
{
var sb = sender.FindResource("myStoryboardKey") as Storyboard;
if (sb != null)
{
sb.Begin();
}
}
private void Start_Animation(object sender, RoutedEventArgs e)
{
PlayMyStoryboard(sender as FrameworkElement);
}