含まれているグリッドの境界に制限するドラッグ可能なコントロールを作成しました (つまり、ユーザーがグリッドの外にドラッグできないようにします)。
必要に応じてドラッグをキャンセルできるように、true または false を返すテストが必要です。
VisualTreeHelper.FindElementsInHostCoordinates や TransformToVisual などを見てきましたが、コントロールの各コーナーを何度もチェックしないと簡単な方法を見つけることができません。
たとえば、いくつかのコード (Dialog はドラッグされているコントロールの名前です):
MouseEventHandler mouseMove = (s, args) =>
{
var transform = new TranslateTransform();
transform.X = args.GetPosition(Dialog).X - _mouseDownPosition.X;
transform.Y = args.GetPosition(Dialog).Y - _mouseDownPosition.Y;
if (transformGroup != null)
{
transformGroup.Children.Add(transform);
Dialog.RenderTransform = transformGroup;
}
};