Инициирование поведения раскадровки Silverlight по требованию - PullRequest
1 голос
/ 02 октября 2010

Я возиться с Silverlight, пытаясь выяснить, как заставить его работать, и есть одна вещь, которую я, кажется, не замечаю, в отношении раскадровок и получения поведения для запуска по требованию.Далее описывается синий эллипс, который имеет проекцию Transform 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 ]

1 голос
/ 02 октября 2010

КитМахони верен. Вы анимируете до 160 градусов от текущего значения .

Раскадровки не останавливаются, когда они заканчиваются. Они содержат последние значения, , если вы явно не остановите их .

Это означает, что второй цикл анимируется от 160 до 160, поэтому он ничего не делает.

Чтобы исправить, либо установите начальное значение 0, используя С , как предложено, либо измените обработчик события мыши на:

private void ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Storyboard1.Stop();
    Storyboard1.Begin();
}
1 голос
/ 02 октября 2010

Попробуйте указать значение «От» на анимации.Не могли бы вы анимировать собственность от одной и той же стоимости?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...