2

画面の一方の端からもう一方の端に (水平に) 数秒で移動するためのボタンが必要な要件があります。私はこれを試し、ある程度動作します。

<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のValue を動的に設定したい。コードビハインドまたはバインディングまたはその他の方法。

しかし、コード ビハインドでストーリーボード全体を書きたいわけではありません。

を使用して画面の幅と高さを取得できます

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

簡単な方法があれば教えてください。

4

1 に答える 1

4

ストーリーボード式の値を BIND する方法が見つかりませんでした。

ただし、回避策は毎回手動で設定することです。これを行うには、次のような name 属性を指定します。

    <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 秒でオブジェクトが画面上を水平に移動する素敵な小さなアニメーションが作成されます。

于 2013-11-27T07:25:49.247 に答える