ViewBox下でManipulationを行う場合

Viewbox>Canvas>UIElement
画面サイズに左右されないように、上記のような構成で行っているの場合が多いと思います。
この時にManipulationを使用してUIElementを移動させる場合、ずれが出ます。
Viewboxがサイズだけでなく移動距離も変換しているためとみられます。

これを解決する方法としては、Viewboxの変換スケールを取得して、移動量をスケールで除算することで可能です。

private void ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
{
        var scaleX = Viewbox.ActualWidth / Viewbox.Child.DesiredSize.Width;
        var scaleY = Viewbox.ActualHeight / Viewbox.Child.DesiredSize.Height;

        double x = e.Delta.Translation.X;
        double y = e.Delta.Translation.Y;

        x = Canvas.GetLeft(obj) + (x / scaleX);
        y = Canvas.GetTop(obj) + (y / scaleY);
}

0除算チェックなどはしてないコードですが、こんなのでどうにかなります。

個人的には、移動までスケール変換されるのはどうなのかなとは思いますが、仕様ということならしょうがない(;´Д`)

でも、これはこれで修正されるとこのコード入れてるのがおかしくなるだろうから痛し痒し、がらっとバージョン変わった時でないと分離できないかなー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください