2013-11-26 78 views
0

我有這個(粗略如):WPF - 複製一個StackPanel

<StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <Label .../> 
     <TextBox .../> 
     <Button Content="Add new input row" ... /> 
    </StackPanel> 
</StackPanel> 

非常自我解釋,我想補充一個新的水平的StackPanel每按一下按鈕..

是可能?

謝謝!

+4

是的。例如,使用'ItemsPanel',將其綁定到'ObservableCollection',使用'StackPanel'作爲內容或模板,並將按鈕的onclick事件處理程序中的項目添加到集合中。 – Jensen

回答

0

對於這個XAML上面我會做這樣的:

在每一個按鈕名稱的Click事件句柄「添加新的輸入行「,我的意思是你可以使用這個事件的所有按鈕。

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; 
     } 
+0

謝謝,標記爲他人回覆 –

+0

隨時歡迎您! – HICURIN

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來做到這一點,但我從來沒有嘗試過。

這裏是一個簡短的文章的鏈接:

arcanecode.com

+2

你的新'StackPanel'將是空的,但是OP想要一些帶有一些現有控件的'StackPanel'。 –

+0

@KingKing他可以編寫一個方法,用他想要的控件創建新的StackPanel。但是我沒有看到他提到它必須包含任何現有的控件。無論如何,只要他不提供更多細節,我無法提供更多幫助。 – Tafari

+0

顯然我會添加控制:) –