我开发一个WPF在C#,我想多次,画中的特定行,而不会丢失之前的小径。我有 buttons
里面我的Grid
和它的时间我按一个我想要一条线被绘制。对于该行,我使用var redLine
,每次按下按钮时,它都会收到一对特定的坐标。绘制同一行多次,而不会丢失以前的小径
我使用此代码画线:
public partial class MainWindow : Window {
private Line redLine = new Line();
SolidColorBrush redBrush = new SolidColorBrush(Colors.Red);
public MainWindow()
{
redLine.StrokeThickness = 4;
redLine.Stroke = redBrush;
}
private void button1_Click(object sender, RoutedEventArgs e) {
redLine.X1 = 237;
redLine.Y1 = 382;
redLine.X2 = 288;
redLine.Y2 = 409;
//draw the line
MainGrid.Children.Add(redLine);
}
private void button2_Click(object sender, RoutedEventArgs e) {
redLine.X1 = 130;
redLine.Y1 = 323;
redLine.X2 = 238;
redLine.Y2 = 690;
//draw the line
MainGrid.Children.Add(redLine);
}
}
但每次我按button1
然后button2
我得到这个错误(这也恰好为这些按钮的其余部分):
错误指定的Visual已经是另一个视觉的子元素或 CompositionTarget的根。
我确实想保留两条线,而不是删除第一条,以便绘制第二条。任何想法如何解决它?
注意我不想在每个buttonX_Click方法中声明每行(在整个程序中大约有11行)。
_“我不想在每个buttonX_Click方法中声明每一行(整个程序中大约有11行)。”_为什么不呢?这可能会解决问题。是纯粹的,所以你不必重复宽度/画笔等的实例化/设置? –
它不应该是'CheckBox'es显示/隐藏线?在WPF中,您可以使用数据模板来可视化项目集合(在您的案例行中)。请参阅[this](http://stackoverflow.com/a/23564452/1997232)。只需将新项目添加到集合中,即可在视图中显示新行。 – Sinatr
@JamesThorpe从编程角度来看,我没有发现它是“正确的”,一次又一次地声明每一行。 –