WPF C#编码行无法识别坐标原点

问题描述 投票:0回答:2

我正在探索WPF + C#的图形功能。与XAML划清界限可以达到预期效果。好。用C#代码画一条简单的线会使事情“奇怪”。坐标显示not其中他们应该是。为什么?以下代码应实现从(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);
        }

您使用什么面板都没关系:画布,底座面板,网格,堆栈面板,我观察到相同奇怪而烦人的行为。Not showing the diagonal. Not beginning at origin-vertex (0,0): (left,top)

c# wpf wpf-controls line cartesian-coordinates
2个回答
0
投票

您的问题是Thickness(10, -10, 36, 250)。这种任意的余量切断了其余部分。这是代码的简化版本,可以正确地从左上角到右下角画一条线:

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


0
投票

您可以通过简单的路径语句轻松完成此操作-使用Stretch =“ Fill”,因此无需担心尺寸

<Path Stroke="Black" StrokeThickness="4" Data="M 0,0 L 1,1" Stretch="Fill" />
© www.soinside.com 2019 - 2024. All rights reserved.