нарисовать прямоугольник на месте курсора

Я пытаюсь нарисовать круг и прямоугольник при щелчке мыши, поэтому я получил шнуры x и y щелчка мыши.

Я искал в Интернете, что в C # это можно сделать только с Margin, в java нет источника или чего-то подобного, вы можете указать x и y в конструкторе.

Теперь я пытаюсь установить это правильно, но я не могу понять, как это правильно рассчитать:

Согласно этому:

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.margin%28v=vs.95%29.aspx

rec.Margin = new Thickness(0, 0,0, 0);

Кто-нибудь может мне помочь? Или с этим нельзя?


person user1007522    schedule 14.11.2012    source источник
comment
Вы можете использовать Canvas для позиционирования FrameworkElements и Controls с абсолютными координатами. Вы также можете переопределить метод OnRender.   -  person strmstn    schedule 14.11.2012
comment
Это WinForms или WPF?   -  person Groo    schedule 14.11.2012


Ответы (2)


Это WPF или Windows Forms? Аргументы события мыши WPF имеют метод GetPosition(UIElement), который сообщит вам координаты мыши относительно элемента управления, который вы передаете. Поэтому, если вы пытаетесь нарисовать прямоугольник на System.Windows.Controls.Canvas с именем MyCanvas, вы можете использовать Point, возвращенный e.GetPosition(MyCanvas), чтобы поместить свой прямоугольник .

Вот пример:

void MyCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    Point ClickPoint = e.GetPosition(MyCanvas);
    Rectangle Rectangle = new Rectangle();
    System.Windows.Controls.Canvas.SetTop(Rectangle, ClickPoint.Y)
    System.Windows.Controls.Canvas.SetLeft(Rectangle, ClickPoint.X)
    MyCanvas.Children.Add(Rectangle);
}
person Spencer Ruport    schedule 14.11.2012
comment
Спасибо. На самом деле это сенсорный стол WPF (поверхность), но я думаю принцип тот же или нет? - person user1007522; 15.11.2012
comment
Я не знаю. Это довольно актуальная информация, которую вы должны опубликовать в своем вопросе. - person Spencer Ruport; 15.11.2012

void MyCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    Point ClickPoint = e.GetPosition(MyCanvas);
    Rectangle Rectangle = new Rectangle();
    System.Windows.Controls.Canvas.SetTop(Rectangle, ClickPoint.Y)
    System.Windows.Controls.Canvas.SetLeft(Rectangle, ClickPoint.X)
    MyCanvas.Children.Add(Rectangle);
}

Спасибо Спенсеру.

person user1007522    schedule 14.11.2012