是否可以使用XAML组合扩展隐式设置元素的大小?

时间:2018-06-16 14:04:21

标签: uwp windows-community-toolkit windows-composition-api

我正在尝试实现元素大小更改的自动动画。我认为组合和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元素大小更改的自动动画?

0 个答案:

没有答案