use*_*152 2 c# wpf animation eventtrigger
我尝试为我的用户控件做一个简单的旋转动画.当控件获得键盘焦点时,将触发此动画.我希望它围绕它的中心旋转.
问题是,我在加载动画的控件左下角设置了原始中心点.因此,为了纠正这个问题,我将中心设置在触发器IsFocused的控件中间.
但我的GetKeyboardFocus动画保留了原始中心.
触发器是在eventtrigger之后执行的吗?或者我做错了什么.
<UserControl x:Class="testtuile.rectangle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Height="150" Width="300" Padding="4" Focusable="True" MouseDown="UserControl_MouseDown" IsTabStop="True">
<UserControl.RenderTransform>
<RotateTransform Angle="0" CenterX="0" CenterY="150"></RotateTransform>
</UserControl.RenderTransform>
<UserControl.Style>
<Style>
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value="True">
<Setter Property="Control.BorderBrush" Value="Gold"></Setter>
<Setter Property="Control.BorderThickness" Value="2"></Setter>
<Setter Property="Control.RenderTransform">
<Setter.Value>
<RotateTransform CenterX="150" CenterY="75"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
<UserControl.Triggers>
<EventTrigger RoutedEvent="Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
From="90" To="0" Duration="0:0:0.8"
AutoReverse="False"
/>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="0" Duration="0:0:0.6"
AutoReverse="False"
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="GotKeyboardFocus">
<EventTrigger.Actions>
<BeginStoryboard Name="ButtonFocusedAnimation">
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
From="-2" To="2" Duration="0:0:1"
AutoReverse="True" RepeatBehavior="Forever"
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="LostKeyboardFocus">
<StopStoryboard BeginStoryboardName="ButtonFocusedAnimation" />
</EventTrigger>
</UserControl.Triggers>
<Grid Background="Aquamarine">
</Grid>
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
您不必在动画之前更改它.要旋转圆形中心点设置UIElement.RenderTransformOrigin为UserControl:
<UserControl RenderTransformOrigin="0.5,0.5" ...>
Run Code Online (Sandbox Code Playgroud)
获取或设置RenderTransform声明的任何可能的渲染变换的中心点,相对于元素的边界
然后
RenderTransformOrigin对Point结构值的使用有些不规范,因为Point不表示坐标系中的绝对位置.相反,0到1之间的值被解释为每个x,y轴中当前元素范围的因子.例如,(0.5,0.5)将使渲染变换在元素上居中,或者(1,1)将渲染变换放在元素的右下角
| 归档时间: |
|
| 查看次数: |
6832 次 |
| 最近记录: |