1

NavigationWindowに基づく「レガシー」WPFアプリケーションがあります。NavigationWindowには、ContentPresenterを次のように格納するかなり大きなControlTemplateがあります。

<ControlTemplate>
    ....snip...
<ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
    .....snip....
    </ControlTemplate>

そのContentPresenterを最初のタブとして使用し、実行時に他のタブを動的に追加します。このような:

    <ControlTemplate>
....snip...
<TabControl Background="Transparent" cal:RegionManager.RegionName="MainRegion" Grid.ColumnSpan="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
       <TabItem Header="Nav Window Content">
           <ContentPresenter x:Name="PART_NavWinCP" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
       </TabItem>
    </TabControl>
.....snip....
</ControlTemplate>

次に、モジュールはRegionNameを取得し、そのコンテンツを動的に挿入します。問題は、PRISMリージョンマネージャーが、コードがContentTemplateにあることを気に入らず、リージョンを解決できないことであると思われます。RegionManagerを更新し、Regionを動的に追加して、ContentPresenterなしでルートタブコントロールを使用しようとしましたが、これを機能させることができません。何か案は?

4

2 に答える 2

0

テンプレート内のリージョンは問題です。テンプレートは最初のコンテンツの後にレンダリングされるため、テンプレートは「コントロール」またはインスタンス自体でさえも使用せず、リージョンマネージャーはそれを処理する方法がありません。この方法でリージョンを追加することはサポートされないと思います。

これで、テンプレートなしのタブコントロールをまっすぐに表示できましたが、モジュールの読み込みを行う前に、ターゲットリージョンタイプの処理方法を知っているコンテンツアダプターを作成し、それをブートストラッパーに登録する必要があったことを思い出してください。

于 2010-05-07T19:28:37.847 に答える
0

そこで、NavigationWindowをフレームに変更し、コンテンツをフレームにドロップすることで、これを回避しました。見栄えを良くするために、少しスタイリングする必要があります。ただし、これは、NavigationWindowコンテンツテンプレートでのリージョンの使用を回避する唯一の方法です。現在、アプリに共通であり、シェルで必要となるすべてのコードをフレームから削除しています(NavigationWindowをシェルにすることはできないため)。

于 2010-05-10T18:38:36.363 に答える