2011-03-09 51 views
0

我在包含不同控件的Canvas中有一個GroupBox。在運行時,我想將GroupBox更改爲Expander。wpf:刪除GroupBox中的控件

不,我不能在xaml中做到這一點。那很簡單!

我得到GroupBox的所有孩子,並知道我必須從它中分離孩子,將它添加到新的Visual。

下面的代碼:

for (int i= 0; i < VisualTreeHelper.GetChildrenCount(Canvas2DHandler); i++) 
       { 
        DependencyObject child = VisualTreeHelper.GetChild(Canvas2DHandler, i); 

        if (child != null && typeof(GroupBox) == child.GetType()) 
        { 
         GroupBox roomGroupBox = (GroupBox)child; 
         Expander roomExpander = new Expander(); 
         StackPanel sPForExpander = new StackPanel(); 
         roomExpander.Header = roomGroupBox.Header; 
         for (int n=0; n < VisualTreeHelper.GetChildrenCount(child); n++) 
         { 
          UIElement groupBoxChild = VisualTreeHelper.GetChild(child, n) as UIElement; 
          //remove control from groupBox (HOWTO???) 

          sPForExpander.Children.Add(groupBoxChild); 
         } 
         roomExpander.Content = sPForExpander; 

        } 
       } 

,而我試圖獲得有關刪除兒童的信息我甚至不能找到一個組框的兒童的定義。這可能是重點嗎?

我該如何解決這個問題/有沒有完全的其他方法?

坦克幫助!

燕姿

回答

0

分組框中只有一個孩子 - 看的內容屬性,所以你必須從它刪除控件。

使用:
((TypeOfContainer)roomGroupBox.Content).Children.Remove(groupBoxChild);

將「TypeOfContainer」替換爲您的groupbox中的面板類型(StackPanel等)

+0

感謝您的快速回答。我忽略了我自己的stackpanel – Stef