Добавить точку на холст - PullRequest
4 голосов
/ 18 января 2012

Я пишу код в Microsoft Visual Studio 2010 Express для Windows Phone.Мне нужно добавить точку на Canvas, но я не могу ...

for (float x = x1; x < x2; x += dx)
{
    Point poin = new Point();
    poin.X = x;
    poin.Y = Math.Sin(x);
    canvas1.Children.Add(poin);
}

Студия говорит:

Ошибка 2 Аргумент 1: невозможно преобразовать из 'System.Windows.Point 'to' System.Windows.UIElement '

Мой вопрос: как добавить точку на Canvas?

Ответы [ 5 ]

3 голосов
/ 18 января 2012

Из вашего фрагмента кода я предполагаю, что вы пытаетесь нарисовать кривую. Для этого вы можете заглянуть в GraphicsPath. Вместо того, чтобы рисовать отдельные точки, вы можете использовать точки в качестве координат, которые вы соединяете через линии. Затем в своем коде вы можете создать GraphicsPath, используя метод AddLine.

Это можно затем нарисовать на растровом изображении, например.

РЕДАКТИРОВАТЬ

Образец (не тестировался):

GraphicsPath p = new GraphicsPath();

for (float x = x1; x < x2; x += dx)
{
    Point point = new Point();
    point.X = x;
    point.Y = Math.Sin(x);

    Point point2 = new Point();
    point2.X = x+dx;
    point2.Y = Math.Sin(x+dx);

    p.AddLine(point, point2);
}

graphics.DrawPath(p);

Другим способом будет использование класса WPF Path, который будет работать примерно так же, но является реальным элементом пользовательского интерфейса, который вы можете добавить к дочерним элементам Canvas.

РЕДАКТИРОВАТЬ

Люди отметили, что приведенный выше код является кодом Windows Forms. Ну, вот что вы можете сделать в WPF:

myPolygon = new Polygon();
myPolygon.Stroke = System.Windows.Media.Brushes.Black;
myPolygon.Fill = System.Windows.Media.Brushes.LightSeaGreen;
myPolygon.StrokeThickness = 2;
myPolygon.HorizontalAlignment = HorizontalAlignment.Left;
myPolygon.VerticalAlignment = VerticalAlignment.Center;

PointCollection points = new PointCollection();
for (float x = x1; x < x2; x += dx)
{
    Point p = new Point(x, Math.Sin(x));
    points.Add(p);
}

myPolygon.Points = points;
canvas1.Children.Add(myPolygon);
1 голос
/ 18 января 2012

Point, который вы использовали, это не UIElement, а структура, пожалуйста, используйте Line вместо.

Line lne = new Line();
lne.X1 = 10;
lne.X2 = 11;
lne.Y1 = 10;
lne.Y2 = 10;
canvas1.Children.Add(lne);

Вы поняли ...

Редактировать
изменена: lne.X2 = 10 до lne.X2 = 11

1 голос
/ 18 января 2012

Если вы хотите добавить только одну точку, вы можете добавить к холсту крошечный прямоугольник или эллипс.

Если вы хотите установить много точек или пару точек много раз,Я предлагаю вам создать массив данных пикселей (цветов) и записать их в WriteableBitmap

0 голосов
/ 18 января 2012

Попробуйте добавить эллипс

Ellipse myEllipse = new Ellipse();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 255, 255, 0);
myEllipse.Fill = mySolidColorBrush;
myEllipse.StrokeThickness = 2;
myEllipse.Stroke = Brushes.White;
myEllipse.Width = 200;
myEllipse.Height = 100;
Canvas.SetTop(myEllipse,50);
Canvas.SetLeft(myEllipse,80);
myCanvas.Children.Add(myEllipse);
0 голосов
/ 18 января 2012

Согласно ошибке, потомки элемента управления Canvas должны быть производными от класса System.Windows.UIElement: System.Windows.Point - нет.Чтобы добиться того, что вы делаете, вам лучше всего использовать геометрию в WPF.См. здесь для статьи о том, как это сделать.

...