如何在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
将负责可视化每个单独的项目。
定义数据项类的视图模型如下所示。 请注意,除了Geometry
和Stroke
属性之外,您可能还有其他属性来定义视觉外观。
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
接口,以防其属性在添加到集合后更改其值。