編集:
わかりました、何らかの理由で、各方向モードで正しい X と Y を報告する WP Toolkit の Gesture リスナーを使用していましたが。あなたの場合、現在の方向モードを検出し、必要な調整を行う必要があります。
向きが横向きの場合、軸が切り替わるようです。横-左モードでは X 軸が反転し、横-右モードでは Y 軸が反転します。次のコードで問題が解決するはずです:
bool _switchAxis;
bool _invertX ;
bool _invertY;
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) {
_switchAxis = (e.Orientation | PageOrientation.LandscapeLeft | PageOrientation.LandscapeRight) == (PageOrientation.LandscapeLeft | PageOrientation.LandscapeRight);
_invertX = e.Orientation == PageOrientation.LandscapeLeft;
_invertY = e.Orientation == PageOrientation.LandscapeRight;
}
private void Touch_FrameReported(object sender, System.Windows.Input.TouchFrameEventArgs e) {
var width = Application.Current.Host.Content.ActualWidth;
var height = Application.Current.Host.Content.ActualHeight;
var primaryPoint = e.GetPrimaryTouchPoint(null);
if (_switchAxis) {
if (_invertY) imgStar.X = height - primaryPoint.Position.Y; else imgStar.X = primaryPoint.Position.Y;
if (_invertX) imgStar.Y = width - primaryPoint.Position.X; else imgStar.Y = primaryPoint.Position.X;
} else {
imgStar.X = primaryPoint.Position.X;
imgStar.Y = primaryPoint.Position.Y;
}
}
OrientationChanged
ページの xaml にイベントを追加する必要があります。
<phone:PhoneApplicationPage
<!-- ... -->
OrientationChanged="PhoneApplicationPage_OrientationChanged"
/>
ランドスケープ モードでは、アプリケーション バーとシステム トレイが表示されると、X が台無しになります。
アプリケーション バーがある場合は、そのモードを最小化に設定します
ApplicationBar.Mode = ApplicationBarMode.Minimized
また、X の手動調整を避けるために、システム トレイを非表示にする必要があります。ページの Loaded イベントでそれを行います。
Xaml:
<phone:PhoneApplicationPage
<!-- stuff -->
Loaded="PhoneApplicationPage_Loaded"
/>
コードビハインド:
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) {
SystemTray.IsVisible = false;
}
また、X から image.Width/2 を差し引き、Y から image.Height/2 を差し引いて、指先のちょうど中心に合わせます。
imgStar.X = PrimaryPoint.Position.X - (img.Width/2);
imgStar.Y = PrimaryPoint.Position.Y - (img.Height/2);
これで問題は解決するはずです。