Полилиния рисует только 2 линии и Point.Parse выпуск - PullRequest
0 голосов
/ 04 июня 2018

Два быстрых вопроса, во-первых, почему мои Polyline соединяют только строки W, X и Y.
Во-вторых, можно ли проанализировать одну строку для нескольких точек, т. Е. Сохранить все числа в строке W изатем Point.Parse(W) для всех точек.

private void Button_Click(object sender, RoutedEventArgs e)
{
    string W = "0,0";
    string X = "99,99";
    string Y = " 99, 300";
    string Z = "600, 300";
    Point[] points = { Point.Parse(W), Point.Parse(X), Point.Parse(Y), Point.Parse (Z)};
    DrawLine(points);
}

private void DrawLine(Point[] points)
{
    Polyline line = new Polyline();
    PointCollection collection = new PointCollection();
    foreach (Point p in points)
    {
        collection.Add(p);
    }
    line.Points = collection;
    line.Stroke = new SolidColorBrush(Colors.Black);
    line.StrokeThickness =3;
    myGrid.Children.Add(line);
}

1 Ответ

0 голосов
/ 04 июня 2018

A Polyline соединяет вершины, указанные с помощью свойства Points , выраженного в виде PointCollection .

Yourтекущая коллекция Points определяет 4 вершины, которые будут генерировать 3 соединенные линии:

1 линия от Point(0, 0) до Point(99, 99)
1 строка от Point(99, 99) до Point(99, 300)
1 строка от Point(99, 300) до Point(600, 300)

Примерно так:

\
 \
  \
   |
   |
   |____________

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

Метод PointCollection.Parse () позволяет указать строку, содержащую коллекциюиз точек, разделенных запятой или пар Point ссылок, разделенных пробелом.
Они действительны:

string points = "0,0,99,99,99,300,600,300";

string points = "0,0 99,99 99,300 600,300";

После этого вы можете иметь одну строку, содержащую все Pointsссылки.
Ваш код может быть изменен следующим образом:

using System.Windows.Media;
using System.Windows.Shapes;

string points = "0,0,99,99,99,300,600,300";
PointCollection collection = PointCollection.Parse(points);
DrawLine(collection);


private void DrawLine(PointCollection points)
{
    Polyline line = new Polyline();
    line.Points = points;
    line.Stroke = new SolidColorBrush(Colors.Black);
    line.StrokeThickness = 3;
    myGrid.Children.Add(line);
}
...