WPF C# кодированные линии не распознают происхождение координат - PullRequest
0 голосов
/ 01 мая 2020

Я изучаю графические возможности WPF + C#. Рисование линии с помощью XAML дает то, что ожидалось. Хорошо. Чтобы нарисовать простую линию с кодом C#, получается что-то «странное». Координаты появляются , а не там, где они должны быть. Почему? Следующий код должен реализовывать диагональ от (0, 0) до (ширина, высота) панели контейнера линии.

private void buttonStart_Click(object sender, RoutedEventArgs e)
        {
            Line line1 = new Line
            {
                Stroke = Brushes.Black
            };

            Thickness thickness = new Thickness(10, -10, 36, 250);
            line1.Margin = thickness;
            line1.Visibility = Visibility.Visible;
            line1.StrokeThickness = 4;

            line1.X1 = 0;
            line1.Y1 = 0;
            line1.X2 = MainGrid.ActualWidth;
            line1.Y2 = MainGrid.ActualHeight;

            line1.HorizontalAlignment = HorizontalAlignment.Left;
            MainGrid.Children.Add(line1);
        }

Не имеет значения, какую панель вы используете: canvas, dockpanel, Сетка, стековая панель, я наблюдал такое же странное и раздражающее поведение. Не показывает диагональ. Не начинается с начала-вершины (0,0): (слева, сверху)

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Вы можете сделать это намного проще с помощью простой инструкции path - используйте Stretch = "Fill", чтобы не беспокоиться о размерах

<Path Stroke="Black" StrokeThickness="4" Data="M 0,0 L 1,1" Stretch="Fill" />
0 голосов
/ 01 мая 2020

Ваша проблема Thickness(10, -10, 36, 250). Это произвольное поле обрезает остальную часть строки. Вот упрощенная версия вашего кода, которая правильно выводит aws строку от верхнего левого угла до нижнего правого:

private void buttonStart_Click(object sender, RoutedEventArgs e)
{
    Line line1 = new Line
    {
        Stroke = Brushes.Black,
        StrokeThickness = 4,
        X1 = 0,
        Y1 = 0,
        X2 = MainGrid.ActualWidth,
        Y2 = MainGrid.ActualHeight
    };

    MainGrid.Children.Add(line1);
}

Обратите внимание, что Visibility = Visibility.Visible осталось, потому что Line ( как и большинство других элементов) видны по умолчанию.

...