EDIT:
Хорошо, по какой-то причине я, хотя вы с помощью жестов слушателя WP Toolkit, который сообщит о правильных X любого Y в каждом режиме ориентации. В вашем случае вам нужно определить, в каком режиме ориентации вы находитесь, и выполнить необходимые настройки.
Похоже, что при ориентации в ландшафте ось переключается. Когда в ландшафтно-левом режиме ось 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;
}
Также вы хотели бы вычесть image.Width/2 из X и image.Height/2 из Y, чтобы сделать его точно в центре кончика пальца.
imgStar.X = PrimaryPoint.Position.X - (img.Width/2);
imgStar.Y = PrimaryPoint.Position.Y - (img.Height/2);
Это должно решить проблему.
Данное предложение не работает, и я не использую SystemTray в любом случае ... Что происходит в том, что каким-то образом // var PrimaryPoint = e.GetPrimaryTouchPoint (null); // возвращает, например, 0,0, если я нажмите на левый нижний угол, как это было бы в нормальном портретном режиме, но изображение будет располагаться напротив верхнего левого угла (480,0). Любые идеи? # –
Смотрите мое редактирование выше. –
Вот и все! Теперь он отлично работает. Большое спасибо POINT. –