首页 > 解决方案 > 是否可以使用 XAML 组合扩展为元素的大小隐式设置动画?

问题描述

我正在尝试实现元素大小变化的自动动画。我认为Composition和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 包装在外部网格中,将隐式动画附加到网格中。没变。

接下来,我尝试手动为 TextBox Visual 的 Size 设置动画:

var visual = ElementCompositionPreview.GetElementVisual(TextBoxControl);
var newSize = new Vector2(visual.Size.X + 20f, visual.Size.Y);
visual.Size = newSize;

The Parameter is incorrect奇怪的是,这在尝试设置新大小时导致异常。

最后,我尝试改变 TextBoxUIElement的宽度而不是它的视觉宽度:

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元素大小变化的自动动画呢?

标签: uwpwindows-community-toolkitwindows-composition-api

解决方案


推荐阅读