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: 追加するオブジェクトの親のタイプです
name: 追加するオブジェクトの名前
parentName: 作成されるオブジェクトの親の名前です下

.Children.Add は「theChild」
のオプションではありません。また、.content は「theChild」のオプションではありません。

実行時にコントロールを親に追加する方法はありますか?

4

3 に答える 3

0

Wpf には、コンテンツ コントロールと項目コントロールの 2 つの主要なコントロール タイプがあります。コンテンツ コントロールには視覚的な子が 1 つしかありませんが、項目コントロールには多くの視覚的な子があります。実行時に項目を視覚要素に追加したい場合は、その項目を項目コントロールにキャストしてから、必要な項目を追加する必要があると思います。これが問題の解決に役立つことを願っています...

于 2013-02-07T20:23:30.520 に答える
0

UI 構造に応じて、さまざまなバリエーションが発生する可能性があります。の子である可能性がある一般的な要素のいくつかのクラスStackPanel:

  • Decorator- これはおそらく aBorderですが、他にもあります。宿泊施設に子供1名がChild宿泊できます。
  • Panel- StackPanelGridCanvasなど。プロパティに追加することで、必要な数の子を持つことができChildrenます。
  • ContentControl- 基本クラス自体の使用に加えてButtonLabelExpander、 なども含まれます。プロパティで 1 人の子供を受け入れることができContentますが、これとは異なり、Decorator.Childこれは Typeobjectであり、何でも受け入れることができます。設定される も、のContentような直接のビジュアル ツリーの子ではありませんがDecorator、コントロールの に注入されControlTemplateます。Contentが非 UI 要素に設定されている場合は、 を使用してテンプレート化することもできますDataTemplate
  • ItemsControl- ListBoxComboBoxItemsControlなど。 に似てContentControlいますが、Items プロパティまたは ItemsSource プロパティのいずれかを介してコンテンツのコレクションを取得します (使用方法がわずかに異なり、どちらか一方のみを使用できます)。Itemsにバインドされているコレクションに、またはコレクションに追加することによって、子を追加しItemsSourceます。
  • 子を持たない他のもの - TextBlockTextBoxSlider、その他多数。

他にも可能性はありますが、これらが最も一般的です。これらは最後の 3 つのカテゴリのいずれかに分類され、最初の 2 つのカテゴリがすべて失われる可能性があるため、キャストしControlても何も得られませんStackPanelparentType次に、最初の 4 つのタイプのいずれかにキャストして、子を設定します。

于 2013-02-07T20:58:31.953 に答える
0

thisChild.AddVisualChild(controlToAdd) を試しましたか?

記事はこちら

于 2013-02-07T20:19:26.117 に答える