シナリオ
グリッドにいくつかのオブジェクトがあります。それらの操作デルタ イベント内でそれらを変換します。オブジェクトは、ユーザーのポインターの下で動かなくなったように見えます。それは動作し、次のようになります。
ellipse.ManipulationDelta += (s, e) =>
{
var transform = ellipse.RenderTransform as CompositeTransform;
transform.TranslateX = e.Cumulative.Translation.X;
transform.TranslateY = e.Cumulative.Translation.Y;
}
すべての可動オブジェクトには楕円形の境界があり、その外側にオブジェクトをドラッグすることはできません。この値は簡単に計算できます。このようなもの:
ellipse.ManipulationDelta += (s, e) =>
{
var boundary = new Ellipse { Height = 50, Width = 100 };
var transform = ellipse.RenderTransform as CompositeTransform;
transform.TranslateX = e.Cumulative.Translation.X;
transform.TranslateY = e.Cumulative.Translation.Y;
};
要件
要求されたポイントが楕円境界の外にある場合、要素を変換しないロジックを実装したいと思います。
おそらくこのようなもの:
ellipse.ManipulationDelta += (s, e) =>
{
var boundary = new Ellipse { Height = 50, Width = 100 };
var point = DeterminePoint(boundary, e.Cumulative.Translation);
var transform = ellipse.RenderTransform as CompositeTransform;
transform.TranslateX = point.X;
transform.TranslateY = point.Y;
};
Point DeterminePoint(Ellipse boundary, Point target) { /* TODO */ }
ロジックを四角形に制限するコードは簡単に記述できます。ただし、長方形は必須ではなく、楕円が必須です。TODO
この質問の核心は、上記のコードのセクションです。
前もって感謝します。