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

Posted

技术标签:

【中文标题】WPF C# 编码行无法识别坐标原点【英文标题】:WPF C# coded lines doesn't recognize coordinates origin 【发布时间】:2020-08-15 10:53:38 【问题描述】:

我正在探索 WPF+C# 的图形功能。用 XAML 画一条线可以达到预期的效果。好的。 用 C# 代码画一条简单的线会使事情变得“奇怪”。坐标出现在的位置 他们应该是。为什么?以下代码应实现从 (0, 0) 到 (width, height) 的对角线 该行的容器面板。

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、grid、stackpanel,我观察到相同 奇怪而烦人的行为。 Not showing the diagonal. Not beginning at origin-vertex (0,0): (left,top)

【问题讨论】:

如果您担心它会专门打到左上角 看起来这条线会到达窗口的角落(包括标题栏)。至于为什么没有控制...我不知道。 是的,但是(右、下)坐标(ActualWidth、ActualHeight)呢? 【参考方案1】:

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

<Path Stroke="Black" StrokeThickness="4" Data="M 0,0 L 1,1" Stretch="Fill" />

【讨论】:

【参考方案2】:

您的问题是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(与大多数其他元素一样)默认可见。

【讨论】:

谢谢,XAML 的答案和 C# 的答案都使对角线正确。这对于坐标系统的实现非常重要。对于 XAML,我注意到对角线调整大小是自动的,对于使用 C# 的行,人需要实现绑定/事件处理程序以使其正确。无论如何,它有效!

以上是关于WPF C# 编码行无法识别坐标原点的主要内容,如果未能解决你的问题,请参考以下文章

为啥WPF无法识别我的这个DynamicResource

WPF 成员“TabNavigation”无法识别或无法访问。

代码中无法识别 WPF CommandParameter

Swift 无法识别 Firebase 用户

“图像格式无法识别”取决于显示器

Visual Studio:无法识别代码中的引用?