Как удалить анимацию WPF, определенную в стиле? - PullRequest
2 голосов
/ 11 ноября 2010

У меня проблема с удалением анимации свойства в WPF.Когда раскадровки запускаются с использованием DataTrigger, я не могу удалить анимацию из свойства, как это было бы в других случаях.Неважно, что я пытаюсь или где: OrientationProperty привязан к конечному значению анимации.Вы можете увидеть это в этом примере, потому что вы не можете вращать ScatterViewItem после того, как раскадровка завершена.

Это XAML:

<s:SurfaceWindow x:Class="SurfaceApplication1.SurfaceWindow1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="http://schemas.microsoft.com/surface/2008"
    x:Name="_this"
    Title="SurfaceApplication1"
    >
    <s:SurfaceWindow.Resources>
        <ImageBrush x:Key="WindowBackground" Stretch="None" Opacity="0.6" ImageSource="pack://application:,,,/Resources/WindowBackground.jpg"/>

        <Storyboard x:Key="flipForward" Completed="FlipCompleted">
            <DoubleAnimation By="180" 
                         FillBehavior="HoldEnd"
                         Duration="0:0:0.5"
                         Storyboard.TargetProperty="(s:ScatterViewItem.Orientation)" />
        </Storyboard>

        <Storyboard x:Key="flipBackward" Completed="FlipCompleted">
            <DoubleAnimation By="-180"
                         FillBehavior="HoldEnd"
                         Duration="0:0:0.5"
                         Storyboard.TargetProperty="(s:ScatterViewItem.Orientation)" />
        </Storyboard>
    </s:SurfaceWindow.Resources>


    <Grid Background="{StaticResource WindowBackground}" >
        <s:ScatterView>
            <s:ScatterViewItem x:Name="_item" Orientation="0">
                <s:ScatterViewItem.Style>
                    <Style TargetType="{x:Type s:ScatterViewItem}" BasedOn="{StaticResource {x:Type s:ScatterViewItem}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=_button,Path=IsChecked}" Value="True">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <StaticResource ResourceKey="flipForward" />
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <StaticResource ResourceKey="flipBackward" />
                                    </BeginStoryboard>
                                </DataTrigger.ExitActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </s:ScatterViewItem.Style>

                <StackPanel>
                    <s:SurfaceToggleButton Margin="20" x:Name="_button">Click Me!</s:SurfaceToggleButton>
                </StackPanel>

            </s:ScatterViewItem>
        </s:ScatterView>
    </Grid>
</s:SurfaceWindow>

И это соответствующий код:

    private void FlipCompleted(object sender, EventArgs e)
    {
        _item.BeginAnimation(ScatterViewItem.OrientationProperty, null); // Doesn't work
        ((sender as ClockGroup).Timeline as Storyboard).Remove(_item); // Doesn't work either
        ((sender as ClockGroup).Timeline as Storyboard).Remove(); // Neither does this
    }

У кого-нибудь есть подсказка, как удалить анимацию из OrientationProperty?

1 Ответ

1 голос
/ 11 ноября 2010

Так же, как вы добавляете раскадровку с BeginStoryboard, вы также можете удалить onve с помощью RemoveStoryboard в XAML.

 <DataTrigger.EnterActions>
     <RemoveStoryboard BeginStoryboardName="flipBackward" />
 </DataTrigger.EnterActions>

Я удивлен тем, что BeginAnimation(ScatterViewItem.OrientationProperty, null); не сработал,ИМХО, должно быть ...

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