2013-05-24 5 views
1

Мне нужно изображение, которое может следовать за моим пальцем (мышью) на экране ... следующий код отлично работает в режиме «Портрет», но он полностью беспорядочен в ландшафтном режиме, это?Точка мыши в ландшафтном режиме

  <Image Height="68" HorizontalAlignment="Left" Margin="872,388,0,0" Name="imgStarPoint" Stretch="Fill" VerticalAlignment="Top" Width="54" Source="/GetMousePoint;component/StarT.png" ManipulationCompleted="imgStarPoint_ManipulationCompleted"> 
       <i:Interaction.Behaviors> 
       <el:MouseDragElementBehavior x:Name="imgStar"/> 
       </i:Interaction.Behaviors> 
      </Image> 

и код позади:

void Touch_FrameReported(object sender, TouchFrameEventArgs e) 
    { 
     var PrimaryPoint = e.GetPrimaryTouchPoint(null); 

     imgStar.X = PrimaryPoint.Position.X; 
     imgStar.Y = PrimaryPoint.Position.Y; 
     txt1.Text = PrimaryPoint.Position.X + "." + PrimaryPoint.Position.Y; 

}

ли кто-нибудь есть способ, чтобы установить изображение на моем кончик пальца на ландшафтном режиме?

ответ

1

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); 

Это должно решить проблему.

+0

Данное предложение не работает, и я не использую SystemTray в любом случае ... Что происходит в том, что каким-то образом // var PrimaryPoint = e.GetPrimaryTouchPoint (null); // возвращает, например, 0,0, если я нажмите на левый нижний угол, как это было бы в нормальном портретном режиме, но изображение будет располагаться напротив верхнего левого угла (480,0). Любые идеи? # –

+0

Смотрите мое редактирование выше. –

+0

Вот и все! Теперь он отлично работает. Большое спасибо POINT. –

Смежные вопросы