web-dev-qa-db-ja.com

WPFのコードビハインドでストーリーボードを作成する

次のコードは正常に動作しています。

<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Duration="0:0:.8" Storyboard.TargetProperty="Left" From="1920" To="0" AccelerationRatio=".1"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

ただし、このFromおよびToの値はstaticです。システムの解像度に基づいて動的に値を渡す必要があります。だから私はコードビハインドで作成する必要があります。することは可能ですか?

分離コードに変換する方法は?

25
Raj

コードで作業する場合、ストーリーボードは必要ありません。質問で示したように、基本的なことのためのアニメーションだけが必要です。簡単に機能することを示すために、少しサンプルを作成しました。

これは、メインウィンドウの背後にある完全なコードです。

namespace WpfCSharpSandbox
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            WidenObject(150, TimeSpan.FromSeconds(1));
        }

        private void WidenObject(int newWidth, TimeSpan duration)
        {
            DoubleAnimation animation = new DoubleAnimation(newWidth, duration);
            rctMovingObject.BeginAnimation(Rectangle.WidthProperty, animation);
        }
    }
}

XAMLは次のようになります。

<Window x:Class="WpfCSharpSandbox.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="Sandbox" Height="350" Width="525">
    <Grid Background="#333333">
        <Rectangle x:Name="rctMovingObject" Fill="LimeGreen" Width="50" Height="50"/>
    </Grid>
</Window>

これをWPFアプリに入れて、どのように機能するかを確認し、実験して、他のアニメーション/プロパティを試してください。

39
Terry

Djerryのコメントサンプルコードを追加すると、次のようになります。

var anim = new DoubleAnimation {
                                From = 1920, 
                                To = 1, 
                               };

wnd.BeginAnimation(Window.LeftProperty, anim); 

そして、このコードをウィンドウにロードされたイベントハンドラーに含める必要があります。お役に立てれば。

2
sthotakura