Xaml ObjectAnimationUsingKeyFrames-WinRT中位置之间的平滑过渡
我想使用ObjectAnimationUsingKeyFrames在winrt中为我的一个控件设置动画。控件应在一段时间内从Margin=“0,0,-500,0”移动到Margin=“0,0,0”。我有以下代码。它几乎可以工作,但一切都是同时发生的,看不到动画或平滑过渡Xaml ObjectAnimationUsingKeyFrames-WinRT中位置之间的平滑过渡,xaml,winrt-xaml,Xaml,Winrt Xaml,我想使用ObjectAnimationUsingKeyFrames在winrt中为我的一个控件设置动画。控件应在一段时间内从Margin=“0,0,-500,0”移动到Margin=“0,0,0”。我有以下代码。它几乎可以工作,但一切都是同时发生的,看不到动画或平滑过渡 <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NameOfControl" Storyb
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="NameOfControl"
Storyboard.TargetProperty="(FrameworkElement.Margin)"
Duration="00:00:00.5">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Thickness>0,0,-500,0</Thickness>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="00:00:0.5">
<DiscreteObjectKeyFrame.Value>
<Thickness>0,0,0,0</Thickness>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
0,0,-500,0
0,0,0,0
- 你知道它为什么不起作用吗李>
- 你还有别的办法吗 如何将控件从某个面板外部移动到其默认值 位置?在我看来,使用保证金是一种黑客行为
对象动画使用关键帧
&离散对象关键帧
u使用时,它不会设置值的动画,而是在提到的关键帧时间设置整个值
为了设置属性(如边距、填充等)的动画,请使用
thicknesanimationusingkeyframes
和splinethicknesskyframe
来代替,这将以更平滑的过渡设置值的动画
给你的样品
<ThicknessAnimationUsingKeyFrames Storyboard.TargetName="NameOfControl"
Storyboard.TargetProperty="(FrameworkElement.Margin)"
Duration="00:00:00.5">
<SplineThicknessKeyFrame KeyTime="00:00:00" Value="0,0,-500,0" />
<SplineThicknessKeyFrame KeyTime="00:00:00.5" Value="0,0,0,0" />
</ThicknessAnimationUsingKeyFrames>
WinRT备选方案
因为您使用的是相关元素,使用右边距将其引入视图
我尝试创建一个示例,它将使用双动画模拟类似的行为
<Rectangle Fill="Red"
Width="10"
Height="10"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<Rectangle.RenderTransform>
<TranslateTransform x:Name="translate"/>
</Rectangle.RenderTransform>
<Rectangle.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="00:00:00.5"
Storyboard.TargetProperty="X"
Storyboard.TargetName="translate"
From="500"
To="0"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Rectangle.Triggers>
</Rectangle>
另外,设置边距属性的动画也不是一个明智的想法,因为它还强制重新进行布局我想,我找到了它。看这个代码。(它将控件向下移动100点,向右移动100点)
但是,您不能忘记将此代码添加到要移动的控件中
<TextBlock Name="TextBlock1" Text="SomeText">
<TextBlock.RenderTransform>
<CompositeTransform/>
</TextBlock.RenderTransform>
</TextBlock>
谢谢您的回复。我也尝试了更长的时间,但它的行为方式相同。ThicknessAnimationUsingKeyFrames
不幸的是在WinRT下不可用。我将答案写为WPF,因为问题的标题或描述中不清楚,直到在您提到这里之后,我看到WinRT的一个小标记。为此道歉。我已经更新了WinRTI的替代方法的答案。我不是WinRT专家,但我会尝试这样做:不要设置边距的动画,而是将控件放置在画布中,并使用双动画设置画布的动画。你可以在Charles Petzold的文章中找到一个例子。WinRT中似乎提供了所有必要的类。
<TextBlock Name="TextBlock1" Text="SomeText">
<TextBlock.RenderTransform>
<CompositeTransform/>
</TextBlock.RenderTransform>
</TextBlock>