Xaml ObjectAnimationUsingKeyFrames-WinRT中位置之间的平滑过渡

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在winrt中为我的一个控件设置动画。控件应在一段时间内从Margin=“0,0,-500,0”移动到Margin=“0,0,0”。我有以下代码。它几乎可以工作,但一切都是同时发生的,看不到动画或平滑过渡

<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>