按需触发Silverlight Storyboard行为

时间:2010-10-01 21:01:15

标签: silverlight

我正在弄乱Silverlight试图找出如何让它打勾,并且有一件事我似乎没有接受,关于故事板和获得按需启动的行为。下面描述了一个蓝色椭圆,它在Y轴上具有变换Y轴投影,因此当它被触发时,它看起来像一个在其垂直轴上以3D旋转的圆。单击椭圆时会触发该行为。如果RepeatBehavior设置为3x,则重复三次并停止。

我想弄清楚的是每次点击椭圆时如何重新触发此行为,因为行为在第一次运行后不会再次触发。我尝试通过创建MouseLeftButtonDown事件并使用

填充它来再次触发它
Storyboard1.Begin();

但这没有任何作用。事实上,如果我在那里设置一个断点,它确实执行,但没有效果。这是Xaml:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" mc:Ignorable="d"
    x:Class="UsingStoryboards.MainPage"
    Width="640" Height="480">
    <UserControl.Resources>
        <Storyboard x:Name="Storyboard1" RepeatBehavior="3x">
            <DoubleAnimation Duration="0:0:2" To="160" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
        </Storyboard>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Loaded">
                <ei:ChangePropertyAction PropertyName="Background">
                    <ei:ChangePropertyAction.Value>
                        <SolidColorBrush Color="#FFE50D0D"/>
                    </ei:ChangePropertyAction.Value>
                </ei:ChangePropertyAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <Ellipse x:Name="ellipse" Fill="#FF000BF5" HorizontalAlignment="Left" Height="80" Margin="54,75,0,0" Stroke="Black" VerticalAlignment="Top" Width="80" MouseLeftButtonDown="ellipse_MouseLeftButtonDown">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <ei:ControlStoryboardAction Storyboard="{StaticResource Storyboard1}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
            <Ellipse.Projection>
                <PlaneProjection/>
            </Ellipse.Projection>
        </Ellipse>
    </Grid>
</UserControl>

2 个答案:

答案 0 :(得分:1)

尝试在动画上指定“发件人”值。你能用同样的价值制作房产的动画吗?

答案 1 :(得分:1)

KeithMahoney是对的。您正在从当前值动画到160度

故事板在结束时不会停止。除非您明确停止,否则它们会保留最后一个值

这意味着第二个周期的动画从160到160,所以它什么都不做。

要修复,请按照建议使用 From 设置起始值0,或将鼠标事件处理程序更改为:

private void ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Storyboard1.Stop();
    Storyboard1.Begin();
}