1

その場で XAML を作成するリソース ローダーがある場合 (この場合は aStackPanelが返されます)、xaml でこれにバインドするにはどうすればよいですか?

私の財産は:

public StackPanel InfoPane {get;set;}

私はこれを試しましたが、うまくいきません

<Grid>
    <ContentPresenter Content="{Binding InfoPane}" />
</Grid>
4

2 に答える 2

1

(すみません、コメントするには長すぎます。)

あなたのアプローチは正しいです、次の最小限の例は私にとってはうまくいきます:

XAML:

<Grid>
    <ContentPresenter Content="{Binding InfoPane}" />
</Grid>

コードビハインド:

public StackPanel InfoPane { get; set; }

public MainWindow()
{
    InitializeComponent();
    InfoPane = new StackPanel();
    InfoPane.Children.Add(new TextBlock { Text = "dynamically created" });
    this.DataContext = this;
}

したがって、あなたの問題はどこかにあるはずです。たぶん、ウィンドウのプロパティを設定したInfoPane 後に設定しましたか?を呼び出さないので、UI はそれが変更されたことを知る方法がないことにDataContext注意してください。PropertyChangedInfoPane

于 2013-07-01T15:02:54.283 に答える
1

バインディングは必要ありません。必要なのは、StackPanel が作成されたときに、StackPanel を Children コレクションに追加することだけです。

そうは言っても、私のアドバイスは別のルートを取ることです:

コンテンツ コントロールをグリッドに配置し、そのコンテンツを実際のコンテンツ (コントロールではない) にバインドし、コンテンツの種類ごとに ContentTemplate を登録して、表示されるコンテンツに応じて ContentControl が正しいテンプレートを選択するようにします。

コードでの UI の作成は、保守が難しく、WPF にはコンテンツ依存の UI を処理する方法があるため、できる限り避ける必要があります。

于 2013-07-01T14:59:08.387 に答える