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;

}

ランドスケープモードで指先に画像を設定する方法はありますか?

4

1 に答える 1

1

編集:

わかりました、何らかの理由で、各方向モードで正しい 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);

これで問題は解決するはずです。

于 2013-05-24T16:45:57.593 に答える