次のコードは正常に動作しています。
<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です。システムの解像度に基づいて動的に値を渡す必要があります。だから私はコードビハインドで作成する必要があります。することは可能ですか?
分離コードに変換する方法は?
コードで作業する場合、ストーリーボードは必要ありません。質問で示したように、基本的なことのためのアニメーションだけが必要です。簡単に機能することを示すために、少しサンプルを作成しました。
これは、メインウィンドウの背後にある完全なコードです。
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アプリに入れて、どのように機能するかを確認し、実験して、他のアニメーション/プロパティを試してください。
Djerryのコメントサンプルコードを追加すると、次のようになります。
var anim = new DoubleAnimation {
From = 1920,
To = 1,
};
wnd.BeginAnimation(Window.LeftProperty, anim);
そして、このコードをウィンドウにロードされたイベントハンドラーに含める必要があります。お役に立てれば。