0

含まれているTabControlPrism 領域があります。特定のイベントに対して何らかの通知 (タブ ヘッダーの点滅など) をトリガーしたいのですが、Prism 領域のコンポーネントからこの通知をトリガーしたいと考えています。

このようなコンポーネントを含むタブが一度開かれると、これを使用VisualTreeUtil.GetParent()してうまく機能し、それを見つけてTabControl通知を示すように変更できるようになります。

VisualTreeUtil.GetParent()しかし問題は、 null を返すため、ユーザーがタブを開くまでこれが機能しないことです。明らかに、Prism はそれまでビジュアル ツリーを接続しないためです。

領域を含む を呼び出しUpdateLayout()TabItemも役に立ちません。ユーザーを混乱させるため、TabItems をプログラムで開きたくありません。

ある種の地域レジストリを実装する以外にできることはありますか (これはかなり醜く、維持するのが難しいでしょう)?

コードを見たい場合は、問題を示すための最小限の解決策を書きました。[構造を印刷] ボタンは、2 番目のタブの (最初はレンダリングされていない非表示の) hello TextBlockからビジュアル ツリーを上に移動しようとします。タブに切り替える前に、TextBlock のみを出力します。その後、ビジュアル ツリーのルートに到達します。これは、タブに切り替えずに達成したいことです。

4

2 に答える 2

1

Adding comment as answer:

This probably isn't exactly the answer you are looking for, but it seems like you're taking a very procedural approach.

Have you considered using an MVVM approach? Each TabItem in the TabControl can have a HeaderTemplate. In the template you can bind to a property in the ViewModel that causes the tab to flash or change appearance

于 2012-08-10T15:29:03.307 に答える
0

うーん.. IIRC Prism 領域は、構成された ContentControl/ContentPresenter です。作業の準備ができたら、すべてのバインディングとデータモデルを配置する必要がありますが、ツリーは表示されないため作成されません。もしそうなら、それらに対して ApplyTemplate() を呼び出して強制することができるはずです。ただし、Prism が初期化時または要求時に contenttemplates/datacontexts を割り当てるかどうかは覚えていません。後者では、ApplyTemplate の呼び出しが役に立たなくなる可能性があります。

于 2012-08-10T10:02:59.837 に答える