2016-08-24 4 views
5

FrameworkElement.Cursorを回転することはできますか?WinFormsを使用せずにカーソルを回転

私のアプリケーションでは、オブジェクトを中心に回転させることができます。回転すると、デフォルトのサイズ変更カーソルは、傾いた枠の上に不自然に表示されます。

Mouse cursor not affected by transform

私が最初に考えCursorプロパティにRotateTransformを適用することでしたが、私たちはXAMLでそれを行うことができないように見えます。次に、私はCursorクラスから継承しようとしましたが、MSの人はsealedです。

もう1つの方法は、デフォルトのカーソルをNoneに設定し、私自身の画像(変換あり)を使用し、その位置をMouseMoveに設定することです。簡単な選択肢があれば、私はその道を歩みたくない。誰でも良い提案がありますか?

できる限りWPF専用のソリューションを探しています。

+2

[回転したテキストボックスに応じた回転カーソル]の複製の可能性があります(http://stackoverflow.com/questions/2835502/rotating-cursor-according-to-rotated-textbox) –

+1

@FirstStep:その回答のコメントそのコードにはいくつかのエラーがあります。さらに、WinFormsライブラリを使用します。それ以外の方法がない限り避けたいものがあります。 – dotNET

+0

私にとって、それは2つの質問の間の合理的な区別です。私はこれを複写として閉じなければならないとは思わない。 – arbitrarystringofletters

答えて

0

最後に、WinFormsまたはPInvokesを使用せずにWPFの範囲内で管理しました。オンザフライでカスタムカーソル(* .cur)を作成するか、Visualをカーソルに変換する代わりに、親コントロールのMouseMoveイベントと、WPF要素(Path)をカーソルとして使用しました。ここで念のために誰がinteresedされる方法です:WPFは、デフォルトの矢印を表示しないように

  1. は、あなたのリサイズ親指(または、あなたの形状の境界として使用しているものは何でも)NoneへのCursorを設定します。
  2. 独自のカーソルを作成します。 FrameworkElementでもかまいませんが、私はPathを使用して、簡単に操作して任意のシェイプを作成できました。私が下に設定したプロパティの大部分は重要であることに注意してください。

    <Path x:Name="PART_EW" Data="M0,20 L25,0 25,15 75,15 75,0 100,20 75,40 75,25 25,25 25,40z" Fill="White" Stroke="Black" StrokeThickness="1" Visibility="Collapsed" Width="50" Height="20" Opacity=".7" Stretch="Fill" Panel.ZIndex="100001" HorizontalAlignment="Left" VerticalAlignment="Top" IsHitTestVisible="False" />

あなたのリサイズ親指に次のコードを追加します。それは、すでにの一部ですので、私は、どこかのコードで私のPathRotateTransformを設定していたこと

protected override void OnMouseEnter(MouseEventArgs e) 
{ 
    base.OnMouseEnter(e); 

    var Pos = e.GetPosition(this); 
    PART_EW.Margin = new Thickness(
         Pos.X - PART_EW.Width/2, 
         Pos.Y - PART_EW.Height/2, 
         -PART_EW.Width, 
         -PART_EW.Height); 
    PART_EW.Visibility = Visibility.Visible; 
} 

protected override void OnMouseLeave(MouseEventArgs e) 
{ 
    base.OnMouseLeave(e); 
    PART_EW.Visibility = Visibility.Collapsed; 
} 

protected override void OnMouseMove(MouseEventArgs e) 
{ 
    base.OnMouseMove(e); 

    var Pos = e.GetPosition(designerItem); 
    PART_EW.Margin = new Thickness(
         Pos.X - PART_EW.Width/2, 
         Pos.Y - PART_EW.Height/2, 
         -PART_EW.Width, 
         -PART_EW.Height); 
} 

注意をリサイズサムを取得し、親コントロールの角度を自動的に取得します。

これは、人々が道路を下るのを助けてくれることを願っています。

関連する問題