WPF – CAL – 単一の制御インスタンスに対する複数の親?

prism wpf

PRISM / CALソリューションに取り組んでいますが、問題はWPF特有のものかもしれません。

コントロールのインスタンスを1つ作成すると TextBlock)をStackPanelの子として追加すると、別のStackPanelの “child”として追加することはできません(親はすでにエラーを設定しています) 私はその理由を理解しています(RegionManagerを使用しているときにも発生します)。

しかし、ビジュアルコントロールが非常に複雑で、1回だけ作成して2か所で使用する必要がある場合に推奨される方法は何ですか? 同じコントロールを画面に2回表示することは実際には意味がないことに同意しますが、それが有用な場合があるかもしれません(例: 「すべて閉じる」ボタン)

ボタンの場合は、1つのICommandにデータバインドされた2つのボタンを作成する必要があります。 しかし、この規則ははるかに複雑なコントロールにも適用されますか(常に新しいインスタンスを作成する)…​

私はこの問題について、各GUIのボタンリストとスタックパネルを別々に作成するレイアウトスイッチャーを作成するときに見つけました。

このトピックに関するアイデアはありますか?

クリス

  1  0


ベストアンサー

これは通常テンプレートによって処理されます。 つまり、データを特定のタイプに抽象化し、テンプレートをそのタイプに関連付けます。 その後、そのデータのインスタンスをビジュアルツリーに何度も配置し、テンプレートを使用してWPFにレンダリングさせます。

要するに、あなたの StackPanel`に TextBlock`を追加しないでください。 代わりに、あなたのデータ型のインスタンスを追加してください。 そして、 DataTemplate`を Customer`タイプに関連付けます。 複数の場所で同じ `UIElement`を親にする方法はありません。

1


自分のコントロール(またはコントロールのコレクション)をリソースとして追加し、自分のコントロール内でバインドして参照することができます。 これは暗黙のうちにコピーを作成します(それらはFreezableになり、WPFはそれらをコピーします)。

一般的には、Kentが示唆しているようにDataTemplatesを使用するべきですが、特別な場合があればこれでうまくいくでしょう。

0


タイトルとURLをコピーしました