WPF新手问题:
我正在尝试在visualstatemanager中的故事板中旋转网格,但没有任何反应。我已经把我的项目减少到下面的简单示例,但仍然没有运气。不透明度动画工作正常,但网格不旋转。我做错了什么?
由于
XAML:
Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="gridMain">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="vsgOrientation">
<VisualState x:Name="vsHorizontal"/>
<VisualState x:Name="vsVertical">
<Storyboard>
<DoubleAnimation To="90" Duration="0:0:0" Storyboard.TargetName ="gridTest" Storyboard.TargetProperty="(Grid.RenderTransform).(RotateTransform.Angle)"/>
<DoubleAnimation To="0.25" Duration="0:0:0" Storyboard.TargetName ="gridTest" Storyboard.TargetProperty="Opacity"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="gridTest" HorizontalAlignment="Left" Height="33" Margin="159,108,0,0" VerticalAlignment="Top" Width="101" Background="#FFB85E5E"/>
</Grid>
这个代码背后:
Class MainWindow
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
VisualStateManager.GoToElementState(gridMain, vsVertical.Name, False)
End Sub
结束班
答案 0 :(得分:2)
从它的外观来看,你缺少网格上的RenderTransform。默认RenderTransform
为Transform.Identity
,您的动画无法找到动画的RotateTransform
,因此没有任何反应。试试这个:
<Grid x:Name="gridTest" HorizontalAlignment="Left" Height="33" Margin="159,108,0,0"
VerticalAlignment="Top" Width="101" Background="#FFB85E5E">
<Grid.RenderTransform>
<RotateTransform/>
</Grid.RenderTransform>
</Grid>
编辑:
如果您想进行多次转换,则需要添加TransformGroup
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
保留您需要的内容并删除不需要的内容。然后更新您的Storyboard.TargetProperty
以使用新的TransformGroup。
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"
2
中的(TransformGroup.Children)[2]
是您要设置动画的变换的索引。