如何在c#wpf应用程序中绘制具有不同z索引的多行

我正在使用DrawingContext.DrawLine函数来绘制线条。 但似乎线条会影响canvas上其他线条的位置。 所以我需要为所有行添加不同的z-index值。 有没有办法绘制具有不同z-index的线条,因此它们不会影响其他线条的位置。 或者是否有任何其他方法可用于绘制线条,比如绘制文本我用TextBlock替换了DrawText方法。

以下是我现在使用的示例代码:

 DrawingGroup dGroup = new DrawingGroup(); DrawingContext dc = dGroup.Open() dc.DrawLine(penScaleMarker, new Point((float)newPointX, (float)newPointY), new Point((float)newMinorEndX, (float)newMinorEndY)); 

为了向Canvas添加动态形状集合,通常会使用Canvas声明ItemsControl作为其ItemsPanel 。 Canvas的ItemsSource属性将绑定到以抽象方式表示形状数据的数据项集合。 ItemsControl的ItemTemplate将负责可视化每个单独的项目。

             

定义数据项类的视图模型如下所示。 请注意,除了GeometryStroke属性之外,您可能还有其他属性来定义视觉外观。

 public class ShapeItem { public Geometry Geometry { get; set; } public Brush Stroke { get; set; } } public class ViewModel { public ObservableCollection ShapeItems { get; } = new ObservableCollection(); } 

你可以在你的MainWindow中实例化并初始化它,如下所示:

 public MainWindow() { InitializeComponent(); var vm = new ViewModel(); vm.ShapeItems.Add(new ShapeItem { Geometry = new LineGeometry(new Point(100, 100), new Point(200, 200)), Stroke = Brushes.Green }); vm.ShapeItems.Add(new ShapeItem { Geometry = new LineGeometry(new Point(200, 200), new Point(100, 300)), Stroke = Brushes.Red }); DataContext = vm; } 

您现在可以向ShapeItem类添加ZIndex属性

 public class ShapeItem { public Geometry Geometry { get; set; } public Brush Stroke { get; set; } public int ZIndex { get; set; } } 

并将以下内容添加到ItemsControl:

  ...     

ShapeItem类还必须实现INotifyPropertyChanged接口,以防其属性在添加到集合后更改其值。