网格不会旋转

时间:2014-02-13 19:27:48

标签: wpf xaml

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

结束班

1 个答案:

答案 0 :(得分:2)

从它的外观来看,你缺少网格上的RenderTransform。默认RenderTransformTransform.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]是您要设置动画的变换的索引。