私はカーソルの位置に情報を表示したいときに忙しいです。問題のキャンバスは、キャンバスから大量の幾何学的図形を表示する際の基本的なチュートリアルに示すように、DrawingVisualを追加する機能を提供するカスタムキャンバスです。onMouseMoveイベントを使用しているときにカーソルに続くDrawingVisualのパフォーマンス問題
キャンバスの座標(v)から直接派生した垂直線と水平線、およびローカル座標(下のコードではp)を表示したいとします。現時点では、これらのオブジェクトを位置(0,0)にレンダリングし、OnMouseMoveイベント中にオフセットを使用して位置を更新します。
水平線と垂直線はDrawingVisual_cursorに、ローカルy座標は_infoのz座標に表示されます。 MouseMoveイベントを使用して
はprivate void oCanvas_MouseMove(object sender, MouseEventArgs e)
{
#region 1. Get location data
System.Windows.Vector v = (System.Windows.Vector)e.GetPosition(oCanvas);
// point in YZ coordinates
BSMath.DoubleXY p = new BSMath.DoubleXY();
p.X = (oCanvas.OriginY - v.Y)/oCanvas.ZoomFactor;
p.Y = (oCanvas.OriginX - v.X)/oCanvas.ZoomFactor;
#endregion
#region 2. Update cursor and info
if (oSettings.ShowInformation)
{
_info.Info = p.X.ToString("0.0") + " | " + p.Y.ToString("0.0");
_info.Render(0, 0);
_info.Visual.Offset = v;
}
// move cursor
_cursor.Visual.Offset = v;
}
オーバーヘッドの多くを作成しているようだと、私はすぐにマウスを移動するとき、私はマウスの動きを追跡する問題があることがわかります。
誰も同じ効果を作り出すより良い方法をお勧めしますか?
example http://www.iccg.be/test/images/canvas.jpg
編集: 私は少しさらにそれを調査し、問題がキャンバスの解像度が大きいときに発生するようです。 600x400キャンバスの場合は遅れはありませんが、1000x800程度の時にはフーバー時の遅延が問題になります。キャンバスの全幅/高さを持つ線の代わりに、ユーザーが描いた十字線を使用すると、パフォーマンスが向上します。
がどのように振る舞うん[変換](http://msdn.microsoft.com/en-us/library/system.windows.media.containervisual:
は、ここでは、コードです。 transform.aspx)プロパティを[TranslateTransform](http://msdn.microsoft.com/en-us/library/system.windows.media.translatetransform.aspx)に変更する必要があります。 – Clemens
ありがとうございましたが、残念ながら 'TranslateTransform'では改善がありません – Geoffrey