WPF- 스토리 보드를 다른 로컬 리소스에 영향을 줄 수 없습니다.
-
11-09-2019 - |
문제
로컬 리소스로 변환과 스토리 보드를 설정했지만 버튼에서 스토리 보드를 트리거하면 다음 오류가 발생합니다.
{ " 'worldTranslation'이름은 'System.Windows.controls.button'의 이름 범위에서 찾을 수 없습니다."}
누군가 나를 올바른 방향으로 가리킬 수 있습니까?
<Window.Resources>
<Transform3DGroup x:Key="WorldTranslation">
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="myAngleRotation" Axis="0,1,0" Angle="0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
<Storyboard x:Key="MyStoryboard">
<DoubleAnimation
Storyboard.TargetName="WorldTranslation"
Storyboard.TargetProperty="(Transform3DGroup).(RotateTransform3D).(RotateTransform3D.Rotation).(AxisAngleRotation3D.Angle)"
From="0"
To="360"
Duration="0:0:1"
/>
</Storyboard>
</Window.Resources>
그리고 그녀는 버튼 xaml ...
<Button Height="20" Width="100">
<Button.Content>Blah</Button.Content>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryboard}" >
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
해결책
xaml에는 몇 가지 잘못된 것이 있습니다. 변환 인라인부터 시작한 다음 리소스로 리팩터링하겠습니다. 불필요하게 문제를 복잡하게하지 않기 위해 2D rotatetransform으로 변경되었습니다.
우리는 다음과 같이 시작합니다.
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<RotateTransform Angle="0" x:Name="MyAnimatedTransform"/>
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyAnimatedTransform"
Storyboard.TargetProperty="(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
그런 다음 스토리 보드를 꺼냅니다.
<Window.Resources>
<Storyboard x:Key="MyStoryBoard">
<DoubleAnimation
Storyboard.TargetName="MyAnimatedTransform"
Storyboard.TargetProperty="(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:.3" />
</Storyboard>
</Window.Resources>
<Grid>
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<RotateTransform Angle="0" x:Name="MyAnimatedTransform"/>
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
그리고 마지막으로 Rotatetransform. Storyboard에서 이것을 참조하는 것은 여기서는 작동하지 않습니다. 스토리 보드가 필요합니다. 표적 속성 :
<Window.Resources>
<RotateTransform Angle="0" x:Key="WorldTransform"/>
<Storyboard x:Key="MyStoryBoard">
<DoubleAnimation
Storyboard.Target="{Binding TemplatedParent}"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)"
From="0.0" To="360" Duration="0:0:.3" />
</Storyboard>
</Window.Resources>
<Grid>
<Button Height="20" Width="100"
RenderTransformOrigin=".5,.5"
Content="Blah">
<Button.RenderTransform>
<StaticResource ResourceKey="WorldTransform" />
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
편집 : 보너스 질문으로 인해 ;-) 포함 된 그리드에서 변환이 이루어지기를 원한다고 가정하십시오. 그리드에서 이벤트를 클릭하고 (이벤트를 기억합니까?) 트리거를 거기에 넣으십시오. 템플릿 배치는 이제 그리드가되고 더 이상 버튼이 아닙니다.
<Grid RenderTransformOrigin=".5,.5">
<Grid.RenderTransform>
<StaticResource ResourceKey="WorldTransform"/>
</Grid.RenderTransform>
<Grid.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
</EventTrigger.Actions>
</EventTrigger>
</Grid.Triggers>
<Button Height="20" Width="100"
Content="Blah">
</Button>
</Grid>
제휴하지 않습니다 StackOverflow