我有一个元素,我想在网格上拖拽,但它破坏了我现有的转换
本文关键字:坏了 转换 元素 有一个 网格 | 更新日期: 2023-09-27 18:17:14
这是我的XAML:
<Grid>
<Grid Margin="0,0,20,20" Name="myGrid" Background="#FFFDFDFD" Width="100" Height="100" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Right" VerticalAlignment="Bottom" >
<i:Interaction.Behaviors>
<il:MouseDragElementBehavior ConstrainToParentBounds="True" />
</i:Interaction.Behaviors>
<Grid.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="rotate1" Angle="0" />
<TranslateTransform x:Name="trans1" />
<ScaleTransform x:Name="scale1" ScaleX="1" ScaleY="1" />
</TransformGroup>
</Grid.RenderTransform>
</Grid>
</Grid>
我使用两个库从表达式SDK (I:System.Windows。交互性和(Microsoft.Expression.Interactions)可以让我很容易地在网格中拖动元素,而且性能很好。
问题是这些库搞砸了我的动画(在转换组中使用转换)。如果我在拖动网格之前运行动画,一切都会很好。但是一旦我移动了网格,动画就不再工作了。
我真的是新的这个转换的东西(你可能可以想象),所以任何帮助将非常感激!
我可以通过修改故事板来解决这个问题。属性中的TargetProperty。我最初设置了Storyboard。TargetProperty转换为ScaleTransform本身的"ScaleX"或"ScaleY",它总是工作得很好-只是在我移动网格后它就不再工作了。下面是更新后的代码:
<Storyboard x:Key="sizeAnimation" >
<DoubleAnimation Storyboard.TargetName="myGrid"
Storyboard.TargetProperty="(Grid.RenderTransform).(TransformGroup.Children)[2].(ScaleTransform.ScaleX)"
To="1" Duration="00:00:0.4" />
<DoubleAnimation Storyboard.TargetName="myGrid"
Storyboard.TargetProperty="(Grid.RenderTransform).(TransformGroup.Children)[2].(ScaleTransform.ScaleY)"
To="1" Duration="00:00:0.4" />
</Storyboard>
TargetProperty现在遍历TransformGroup中的Transforms,以获得动画所需的当前值([2]是我需要访问的Transform的索引-这是原始XAML中的ScaleTransform)。
现在一切正常。希望对大家有所帮助