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# 编码行无法识别坐标原点的主要内容,如果未能解决你的问题,请参考以下文章