Позиционирование фигуры

190
12 ноября 2018, 19:20

Пытаюсь по клику мыши (её координатам) отобразить прямоугольник, но он почему то отрисовывается немного левее и выше относительно курсора, а не из под курсора, в чём проблема ?

Пробовал ещё и с линией, тоже присутствует смещение(

Цель отрисовывать из под курсора.

Координаты получаю так:

private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
    Point point = PointToScreen(Mouse.GetPosition(this));
    RisuemPryamougolnik(point.X, point.Y);
}

Отображаю прямоугольник по клику так:

private void RisuemPryamougolnik(double x,double y)
{
    Rectangle rect = new Rectangle();
    rect.Height = 50;
    rect.Width = 50;
    // rect.Fill = Brushes.Aqua;
    rect.Stroke = Brushes.Aqua;
    rect.StrokeThickness = 1;
    canvas.Children.Add(rect);
    Canvas.SetLeft(rect, x);
    Canvas.SetTop(rect, y);        
}

Answer 1

Измеряйте позицию относительно вашего Canvas, а не относительно окна, ну и не нужно приводить координаты к экранным, т.к. они будут отличаться если включено масштабирование Windows (или при DPI отличном от 96):

Point point = Mouse.GetPosition(canvas);

или

Point point = e.GetPosition(canvas);
READ ALSO
Асинхронный json на c#

Асинхронный json на c#

Мне надо обработать 20 элементов, полученных с помощью jsonЭлементы могут быть двух типов, и для каждого надо запросить разную дополнительную...

158
Конвертировать строку в Unicode [дубликат]

Конвертировать строку в Unicode [дубликат]

На данный вопрос уже ответили:

141