C# 两个控件之间的行不';重画

C# 两个控件之间的行不';重画,c#,wpf,button,line,C#,Wpf,Button,Line,我有b个由code动态创建的按钮,我想在同一堆栈面板的第一个节点和最后一个节点之间画一条线。问题是,每当我调用此函数时,它都不会将第一行移动到b按钮,而是将行向右移动 我的行绘图功能代码: public void CreateALine() { redLine = new Line(); redLine.X1 = nodul_nou[0].Margin.Left ; redLine.Y1 = nodul_nou[b].Margin.Top - 40; redL

我有b个由code动态创建的
按钮
,我想在同一
堆栈面板的第一个节点和最后一个节点之间画一条
线
。问题是,每当我调用此函数时,它都不会将第一行移动到b
按钮,而是将行向右移动

我的
绘图功能代码:

public void CreateALine()
{
    redLine = new Line();

    redLine.X1 = nodul_nou[0].Margin.Left ;
    redLine.Y1 = nodul_nou[b].Margin.Top - 40;

    redLine.X2 = nodul_nou[b].Margin.Left ;
    redLine.Y2 = nodul_nou[b].Margin.Top - 40;

    SolidColorBrush redBrush = new SolidColorBrush();

    redBrush.Color = Colors.Black;
    redLine.StrokeThickness = 4;
    redLine.Stroke = redBrush;

    workplace.Children.Add(redLine);
}

注意:
结节诺[b]
是我所说的
按钮,它没有在第一个
按钮
结节诺[0]
和b
按钮
结节诺[b]
之间划一条线,我认为有一个打字错误:
红线。Y1=结节诺[b]
应该是红线
.1-a
StackPanel
不是用于此目的的适当容器。你需要一张
画布
或什么的。2-您不需要使用这样的过程代码在WPF中“绘制”内容,您需要创建适当的数据,并让用户界面自己处理。3-不要在WPF中的代码中创建或操作UI元素,WPF中不需要也不需要winforms方法。发布您需要的屏幕截图,我可以告诉您在WPF中执行此操作的正确方法。@HighCore,因此我应该在xaml中创建行,然后从代码中修改它?@VladFlad no.您应该创建一个正确的ViewModel,并将UI数据绑定到该ViewModel,并且可能使用
ItemsControl
从ViewModel中的集合动态生成UI元素。再一次,发布一个你需要的屏幕截图,我可以告诉你在WPF中做这件事的正确方法。@VladVlad看起来真的很像某种图表设计器,你不需要任何代码来做这件事,你需要一个
ItemsControl
和两个
DataTemplates
。WPF与其他框架非常不同。您可以下载我的示例代码,看看它是如何工作的,这样您就可以理解在WPF中是如何完成的。