我正在尝试实现元素大小更改的自动动画。我认为组合和XAML之间存在一些我不完全理解的相互作用。
首先,我尝试使用工具包中的XAML扩展:
<TextBox x:Name="TextBoxControl" VerticalAlignment="Center" Width="50">
<animations:Implicit.Animations>
<animations:Vector3Animation Target="Size" Duration="0:0:0.5"/>
</animations:Implicit.Animations>
</TextBox>
...并希望它会在TextBox扩展时自动设置动画,以容纳更多文本。没有骰子。然后我尝试将TextBox包装在外部Grid中,将Implicit Animation附加到Grid。没有变化。
接下来,我尝试手动设置TextBox Visual的大小:
var visual = ElementCompositionPreview.GetElementVisual(TextBoxControl);
var newSize = new Vector2(visual.Size.X + 20f, visual.Size.Y);
visual.Size = newSize;
奇怪的是,这在尝试设置新尺寸时导致了The Parameter is incorrect
异常。
最后,我尝试更改TextBox UIElement
的宽度,而不是它的视觉宽度:
TextBoxControl.Width += 20;
......也没有动画。
最后,在挫折中,我试图让SCALE做同样的事情:
XAML
<TextBox x:Name="TextBoxControl" VerticalAlignment="Center" Width="50">
<animations:Implicit.Animations>
<animations:Vector3Animation Target="Scale" Duration="0:0:0.5"/>
</animations:Implicit.Animations>
C#
var visual = ElementCompositionPreview.GetElementVisual(TextBoxControl);
visual.Scale = new Vector3(visual.Scale.X + 0.1f, visual.Scale.Y + 0.1f, visual.Scale.Z);
......完全符合预期。当我运行C#代码时,TextBox的比例增加了,并且被动画化了。
那么有没有办法通过使用隐式动画来实现UI元素大小更改的自动动画?