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>
.
里面定义它是没有意义的
<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>
.