WPF 从另一种样式访问 StoryBoard

WPF Accessing StoryBoard from another Style

<Window.Resources>

    <Style x:Key="GridStyle" TargetType="{x:Type Grid}">
        <Style.Resources>
            <Storyboard x:Key="GridStoryBoard" >
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                    <EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="-358" />
                    <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="2" />
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Style.Resources>
    </Style>

    <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Style.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click">
                <BeginStoryboard Storyboard="{StaticResource GridStoryBoard}" />
            </EventTrigger>
        </Style.Triggers>
    </Style>

</Window.Resources>

如何从一种风格访问另一种风格的故事板?接收"Cannot find resource named 'GridStoryBoard'. Resource names are case sensitive."

你不能。您需要将 Storyboard 定义为单独的资源:

<Window.Resources>

    <Storyboard x:Key="GridStoryBoard" >
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
            <EasingDoubleKeyFrame KeyTime="0:0:0.25" Value="-358" />
            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="2" />
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>

    <Style x:Key="GridStyle" TargetType="{x:Type Grid}">
    </Style>

    <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Style.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click">
                <BeginStoryboard Storyboard="{StaticResource GridStoryBoard}" />
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

它可以被任何 Style 访问。如果您将其定义为特定 Style 的资源,则它只能由该特定 Style 使用。这就是为什么您首先要在那里定义它的原因。所以如果你希望能够以多种样式使用它,那么在<Style.Resources>.

里面定义它是没有意义的