0

キャンバス内にさまざまなコントロールを含むGroupBoxがあります。実行時に、GroupBoxをExpanderに変更したいと思います。

いいえ、xamlではできません。それは簡単でしょう!

GroupBoxのすべての子を取得し、新しいVisualに追加するには、GroupBoxから子を切り離す必要があることを知っています。

コードは次のとおりです。

 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;

                     }
                 }

子の削除に関する情報を取得しようとしていますが、GroupBoxの子の定義すら見つかりません。それがポイントかもしれませんか?

どうすればこれを解決できますか/完全に他の方法がありますか?

ヘルプのためのタンク!

ステフ

4

1 に答える 1

1

GroupBoxには子が1つだけあります。Contentプロパティを確認するため、そこからコントロールを削除する必要があります。

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

「TypeOfContainer」をグループボックス内のパネルのタイプ(StackPanelなど)に置き換えます

于 2011-03-09T10:56:40.460 に答える