我有这个(粗略的):
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label .../>
<TextBox .../>
<Button Content="Add new input row" ... />
</StackPanel>
</StackPanel>
非常自我解释,我想在按钮上每次点击都添加一个新的Horizontal StackPanel。
可能吗?
谢谢你!答案 0 :(得分:0)
是的,可以尝试像这样处理事件,例如:
// Create your StackPanel.
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
// Add controls to new StackPanel
// Control con = new Control();
// sp.Children.Add(con);
// Add created control to a previously created (and named) container.
myStackPanel.Children.Add(sp);
如果您希望StackPanel包含一些控件,您也可以在此处添加它们。
有一种方法可以通过XamlReader执行此操作,但我从未尝试过。
这是一篇简短文章的链接:
答案 1 :(得分:0)
对于上面的XAML,我会这样做:
在每个按钮名称“添加新输入行”的点击事件句柄中,我的意思是您可以将此事件用于所有按钮。
private void btn_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
StackPanel stkButtonParent = btn.Parent as StackPanel;
StackPanel stkCover = stkButtonParent.Parent as StackPanel;
StackPanel newRow = NewRow();
stkCover.Children.Add(newRow);
}
private StackPanel NewRow() {
StackPanel stk = new StackPanel();
stk.Orientation = Orientation.Horizontal;
Label lbl = new Label();
lbl.Foreground = Brushes.Red; // some attribute
TextBox txt = new TextBox();
txt.Background = Brushes.Transparent; // some attribute
Button btn = new Button();
btn.Content = "Add new row";
btn.Click += btn_Click;
stk.Children.Add(lbl);
stk.Children.Add(txt);
stk.Children.Add(btn);
return stk;
}