2014-02-13 17 views
0

WPF新手问题:电网将不会转动

我试图在旋转的visualstatemanager Storyboard的网格,但没有任何反应。我已经削减了我的项目到下面的简单示例,但仍然没有运气。不透明度动画效果很好,但网格不旋转。我究竟做错了什么?

感谢

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 

末级

回答

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)" 

(TransformGroup.Children)[2]2是要设置动画的变换索引。

+0

谢谢,我发现另一篇文章,导致我到同一个地方。不幸的是它没有区别。 – 2stroke

+0

+1由于RenderTransform确实缺失,现在@ 2stroke将TargetProperty更改为Storyboard.TargetProperty =“(UIElement.RenderTransform)。(CompositeTransform.Rotation)”,并将RotateTransform更改为CompositeTransform并且应该可以工作,如果不是这样一眼就看了一眼。 –

+0

@ChrisW。在Silverlight中有一个CompositeTransform,但不在WPF中。 '(UIElement.RenderTransform)。(RotateTransform.Angle)'或更短,'RenderTransform.Angle'是正确的属性路径。 – Clemens