簡體   English   中英

在C#中以編程方式輕松創建Silverlight動畫

[英]Programmatically create silverlight animation with easing in C#

我正在用Silverlight制作時鍾。 我試圖以編程方式設置動畫代碼,因為我想為3個時鍾指針的每一個重用相同的代碼(而且我不認為我可以用xaml中的單個故事板來做到這一點)。

        public void Rotate(double toAngle, RotateTransform rotate)
    {
        Storyboard sb = new Storyboard();

        DoubleAnimationUsingKeyFrames keyframes = new DoubleAnimationUsingKeyFrames();

        EasingDoubleKeyFrame easingStart = new EasingDoubleKeyFrame();
        easingStart.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
        easingStart.Value = rotate.Angle;

        EasingDoubleKeyFrame easingEnd = new EasingDoubleKeyFrame();
        easingEnd.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5));
        easingEnd.Value = toAngle;
        var ease = new ElasticEase();
        ease.EasingMode = EasingMode.EaseIn;
        easingEnd.EasingFunction = ease;

        keyframes.KeyFrames.Add(easingStart);
        keyframes.KeyFrames.Add(easingEnd);

        Storyboard.SetTarget(keyframes, rotate);
        Storyboard.SetTargetProperty(keyframes, new PropertyPath("(RotateTransform.Angle)"));

        sb.Children.Add(keyframes);
        sb.Begin();
    }

我同時輸入希望當前手旋轉的角度和該手的旋轉變換。 從這個旋轉變換中,我得到了起始角度。

當我運行時鍾時,時鍾指針會移動(秒針每秒移動到正確的位置,等等),但是動畫似乎並沒有真正設置動畫。 他們只是從頭到尾立即進行。

為什么動畫不能正常發生?

跳過問題可能是啟動要在不到一秒鍾的時間內顯示更改的情節提要的延遲。 等到情節提要板准備好顯示時,它基本上會說:“哦……現在過了1秒鍾,我現在應該在哪里?”。 較長的故事板會更好。

我不確定您要對時鍾進行多少控制,但是關於使用單個演示圖板,這里...

我不確定您要解決的總體問題,但是以下示例使用一個簡單的情節提要板來運行3個時鍾指針。 我唯一的問題是我可以為時針(在XAML中)指定的最大時間間隔(沒有解析錯誤)為23:59:59。

    <Storyboard x:Name="SecondHandStoryboard" RepeatBehavior="Forever">
        <DoubleAnimation Duration="0:1:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="SecondHand" />
        <DoubleAnimation Duration="1:0:0" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="MinuteHand"/>
        <DoubleAnimation Duration="23:59:59" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="HourHand"/>
    </Storyboard>

我實際上想在秒針上添加固定的“刻度線”動畫,但是還沒有弄清楚如何使“故事板”旋轉來工作。 基本上使用重復的每秒6度1秒長的情節提要,並緩緩傾斜(將繼續研究該問題)。

無論如何,希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM