XAML:从后面的代码设置Storyboard动画的值

时间:2013-11-04 05:55:15

标签: c# storyboard windows-store-apps winrt-xaml

我有一个要求,我需要一个按钮,在几秒钟内从屏幕的一端移动到另一端(水平)。我试过这个并且在某种程度上有效。

<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="button">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0" />
            <!--<EasingDoubleKeyFrame KeyTime="0:0:6.9" Value="{Binding MainPage.width}">-->
                <EasingDoubleKeyFrame KeyTime="0:0:6.9" Value="-1283.725">
                <EasingDoubleKeyFrame.EasingFunction>
                    <CircleEase EasingMode="EaseIn"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="button">
            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
            <!--<EasingDoubleKeyFrame KeyTime="0:0:6.9" Value="{Binding Path=MainPage.height}">-->
            <EasingDoubleKeyFrame KeyTime="0:0:6.9" Value="-467.732">
                <EasingDoubleKeyFrame.EasingFunction>
                    <CircleEase EasingMode="EaseIn"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>

但问题是由于屏幕尺寸和尺寸造成的。屏幕方向。 在大屏幕上它停在中间。我想动态设置 EasingDoubleKeyFrame 值。代码隐藏或绑定或任何其他方式。

但我不想在Code Behind中编写整个故事板。

我可以获得屏幕宽度&amp;高度使用

Rect bounds = Window.Current.Bounds;
    static double height = 0;
    static double  width = 0;

    public MainPage()
    {
        this.InitializeComponent();
        this.Loaded += MainPage_Loaded;
        height = bounds.Height;
        width = -1 * bounds.Width;
    }

如果有一个简单的方法,请告诉我。

1 个答案:

答案 0 :(得分:4)

我找不到一种方法来绑定故事板表达式的值。

但是,解决方法是每次手动设置它。我们可以通过给它一个名称属性来做到这一点:

    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).    (CompositeTransform.TranslateX)" Storyboard.TargetName="button">
         <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0" />
         <EasingDoubleKeyFrame x:Name="buttonTranslateX"  KeyTime="0:0:9.9" Value="0" />
     </DoubleAnimationUsingKeyFrames>

在页面初始化上设置如下的值:

Rect bounds = Window.Current.Bounds;
static double height = 0;
static double  width = 0;

public MainPage()
{
    this.InitializeComponent();
    this.Loaded += MainPage_Loaded;
    height = bounds.Height;
    width = -1 * bounds.Width;
    buttonTranslateX.Value = width;
}

这将创建一个漂亮的小动画,其中对象将在大约9秒内在屏幕上水平移动。