从模板中访问window.resources中的故事板

时间:2013-09-25 14:19:32

标签: c# wpf xaml

鉴于以下样式以及位于animation的名为<Window.Resources>的故事板,我如何通过((Storyboard)FindResource("animate")).Begin(Tab1, true);

暂停(并恢复)通过代码触发的故事板

以下代码错误说明PauseStoryboard事件无法找到动画,这是有道理的,因为它不在模板中。 BeginStoryboard事件允许您绑定到资源,但暂停和恢复不允许。

<Style x:Key="HiddenTabItem" TargetType="{x:Type TabItem}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate DataType="{x:Type TabItem}">
                <Border x:Name="grid">
                    <ContentPresenter>
                        <ContentPresenter.Content>
                            <TextBlock Text="{TemplateBinding Content}"/>
                        </ContentPresenter.Content>
                    </ContentPresenter>
                </Border>

                <DataTemplate.Triggers>
                    <EventTrigger RoutedEvent="MouseEnter">
                        <PauseStoryboard BeginStoryboardName="animate" />
                    </EventTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

动画故事板:

<Window.Resources>

    <Storyboard x:Key="animate">
        <ObjectAnimationUsingKeyFrames BeginTime="0:0:0" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0">
                <DiscreteObjectKeyFrame.Value>
                    <Visibility>Visible</Visibility>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
        <DoubleAnimation BeginTime="0:0:0.0" Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:0.2"/>
        <DoubleAnimation BeginTime="0:0:2.5" Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5"/>
        <ObjectAnimationUsingKeyFrames BeginTime="0:0:5.5" Storyboard.TargetProperty="Visibility">
            <DiscreteObjectKeyFrame KeyTime="0">
                <DiscreteObjectKeyFrame.Value>
                    <Visibility>Hidden</Visibility>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>

</Window.Resources>

1 个答案:

答案 0 :(得分:1)

  

如何暂停(并恢复)由代码隐藏的故事板

首先保存对故事板的引用,该故事板在代码隐藏的方便位置启动。由于您现在已将其作为参考,因此请从您要定位的控件中订阅鼠标输入事件。在Xaml中或者最有可能在代码隐藏中使用引用故事板来暂停它。

因此无需使用样式触发器。