2013-05-24 4 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

편집 :

좋아, 각 방향 모드에서 올바른 X 어떤 Y를보고 당신은 WP 툴킷의 제스처 수신기를 사용하고 있지만 어떤 이유로 I합니다. 귀하의 경우에 어떤 방향 모드를 감지하고 필요한 조정을해야합니다.

방향이 가로 방향 인 경우 축이 전환되는 것처럼 보입니다. 가로 방향 왼쪽 모드에서 X 축이 반전되고 가로 방향 오른쪽 모드에서 Y 축이 반전됩니다. 당신은 당신의 페이지 XAML에 OrientationChanged 이벤트를 추가 할 필요가

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

: 코드에 따라 당신의 문제를 해결해야

<phone:PhoneApplicationPage 
    <!-- ... --> 
    OrientationChanged="PhoneApplicationPage_OrientationChanged" 
/> 
가로 모드에서

, 눈에 보이는 응용 프로그램 막대 및 시스템 트레이의 뜻 혼란을 X 너를 위해서. 당신이 응용 프로그램 막대가있는 경우

는, 당신은 또한 페이지로드 이벤트

XAML에 그렇게 X의 수동 조정을 피하기 위해 시스템 트레이를 숨길 필요가

ApplicationBar.Mode = ApplicationBarMode.Minimized 

최소화로의 모드를 설정 :

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

이렇게하면 문제가 해결됩니다.

+0

위의 제안이 작동하지 않으며 어쨌든 SystemTray를 사용하지 않습니다 ... 어떻게 된 일인지 // var PrimaryPoint = e.GetPrimaryTouchPoint (null); // 예를 들어 0,0 포인트를 반환합니다. 보통 세로 모드에서와 같이 왼쪽 하단 모서리를 클릭하십시오. 그러나 이미지는 왼쪽 상단 모서리 (480,0)에 대 향하여 놓입니다. 어떤 아이디어? # –

+0

위의 편집을 참조하십시오. –

+0

그게 다야! 이제 완벽하게 작동합니다. 그 점을 지적 해 주셔서 고맙습니다. –