2013-02-07 133 views
0

我試圖在運行時將控件添加到另一個控件。這是我到目前爲止有:在運行時將控件添加到子控件

必須在.NET 3.5

public void addItem(Type addType, Type parentType, string name,string parentName, string fpath) 
    { 

     try 
     { 
      if (asdf != null) 
      { 
      } 
      else 
      { 
       StackPanel stkPnl = (StackPanel)_loadXaml.Content; 
       foreach (UIElement child in stkPnl.Children) 
       { 
        if ((child.GetType() == parentType)) 
        { 
         Control theChild = (Control)child; 
         string theChildsName = theChild.Name; 
         if (theChildsName == parentName) 
         { 
          //I want to create and add the control under "theChild" 
          break; 
         } 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
    } 

將AddType來完成:是的控件的類型
ParentType的:是希望對象的父類型要添加
名稱:是將添加
parentName對象的名稱:是,創建的對象將是下

我有父的名字牛逼ried .Children.Add不是「theChild」
的選項.content不是「theChild」的選項

是否有任何方法在運行時將控件添加到其父項?

回答

0

您是否嘗試過thisChild.AddVisualChild(controlToAdd)?

看文章here

+0

AddVisualChild不是一個選項 – David

0

WPF中有兩種主要類型的控件:內容控制和項目控制。內容控件只有一個視覺小孩,另一方面,項目控件有許多可視化的孩子。如果你想在運行時和項目中添加一個視覺元素,我認爲你必須將該項目投射到一個項目控件,然後添加你想要的項目。希望這可以幫助你解決你的問題...

0

有很多不同的變化,可能會發生取決於你的UI結構是什麼。常見的元素,可能是你的StackPanel的孩子的一些類:

  • Decorator - 這很可能是一個Border但也有其他人。在Child屬性上帶1個孩子。
  • Panel - StackPanel,Grid,Canvas等等。可以通過添加到Children屬性,儘可能多的孩子。
  • ContentControl - 除了使用基類本身,還包括諸如Button,Label,Expander等等。可以在Content屬性上接受1個孩子,但不像Decorator.Child這是object類型,可以帶任何東西。設置的Content也不是Decorator的直接可視樹孩子,而是注入到控件的ControlTemplate中。如果Content設置爲非UI元素,則也可以使用DataTemplate對其進行模板化。
  • ItemsControl - ListBoxComboBoxItemsControl等來ContentControl類似,但需要的內容的集合通過任一項或的ItemsSource性質(略微不同的用法和只能使用一個或另一個)。通過添加到Items或綁定到ItemsSource的任何集合來添加子項。
  • 其他沒有孩子 - TextBlock,TextBox,Slider,其他許多人。

還有其他的可能性,但這些是最常見的。鑄造到Control沒有得到任何東西,因爲它們可能屬於最後3個類別中的任何一個,並且會錯過前2箇中的任何一個。您應該準確定義您期望在該StackPanel中找到的內容,並限制您的類型接受爲parentType,然後投射到前四種類型中的一種來設定一個孩子。

相關問題