Я занят небольшим приложением, в котором я хочу отображать информацию в месте расположения курсора, когда он наводит курсор на холст.Рассматриваемый Canvas является пользовательским (унаследованным от Canvas), который предоставляет функциональные возможности для добавления DrawingVisuals (как показано в основном в каждом руководстве по отображению большого количества геометрических фигур на холсте).
Я хотел бы отобразитьвертикальная линия и горизонтальная линия, а также локальные координаты (p в коде ниже), которые напрямую выводятся из координат холста (v).В настоящее время я рендеринг этих объектов в позиции (0,0) и использовать смещение во время события OnMouseMove, чтобы обновить их местоположение.
Горизонтальные и вертикальные линии отображаются в DrawingVisual _cursor и расположение в локальнойy, z-координаты в _info.
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;
}
Использование события mousemove создает много накладных расходов, и я вижу, что при быстром перемещении мыши возникают проблемы с отслеживанием движений мыши.
Кто-нибудь может порекомендовать лучший способ создания того же эффекта?
пример http://www.iccg.be/test/images/canvas.jpg
Редактировать: Я исследовал это немного дальше, и проблема кажетсяпроизойти, когда разрешение холста больше.Если это холст 600x400, то задержки нет, но когда он составляет около 1000x800, у меня возникает проблема с задержками при работе с пылесосом.Производительность также улучшается, если я использую нарисованные пользователем перекрестия вместо линий, которые имеют полную ширину / высоту холста.