水平方向に積み重ねるスタックパネル内にラップされたボタンのリストがあります。マウスが MainWindow の左端近くにある場合、ボタンがゆっくりと右に移動するようなアニメーションを適用する C# のコード ビハインドを知りたいです。一方、マウスが MainWindow の右側近くにある場合、ボタンはゆっくりと左に移動します。
ボタンは実行時に追加され、スタイルが設定されます。
水平方向に積み重ねるスタックパネル内にラップされたボタンのリストがあります。マウスが MainWindow の左端近くにある場合、ボタンがゆっくりと右に移動するようなアニメーションを適用する C# のコード ビハインドを知りたいです。一方、マウスが MainWindow の右側近くにある場合、ボタンはゆっくりと左に移動します。
ボタンは実行時に追加され、スタイルが設定されます。
canvas
の代わりにa を使用stackpanel
できる場合は、このコードを使用して、私が書いたアニメーションをすぐに実現できます。
次のように、クラスでフィールドを宣言します。private bool _running = true;
この後、これを使用してボタンをアニメーション化できます。
new Thread(() =>
{
while (_running)
{
Thread.Sleep(20);
canvas.Dispatcher.BeginInvoke(DispatcherPriority.Input, new Action(() =>
{
var position = Mouse.GetPosition(canvas).X;
var canvasWidth = canvas.ActualWidth;
if (position >=0 && position < 10.0d)
btn.SetValue(Canvas.LeftProperty, (double)btn.GetValue(Canvas.LeftProperty) + 1);
if (position <= canvasWidth && position > canvasWidth - 10.0d)
btn.SetValue(Canvas.LeftProperty, (double)btn.GetValue(Canvas.LeftProperty) - 1);
}));
}
}).Start();
クラスに次の使用法を追加することを忘れないでください。
using System.Threading;
using System.Windows.Threading;
コードを複数のボタンで動作させたい場合は、たとえばリストを使用して、コードを少し書き直してください。またThread.Sleep(20)
、ニーズに合わせて調整します。
幸運を。