2

私は WPF PRISM を使用しており、 をTabItem使用してナビゲートできるように追加する優雅なアプローチを探していRequestNavigateます。

これは、次のコードを使用して既に達成していますが、実際のビューではありません。実際、これらはタイトルを表示するのに役立っているだけですView1View2

regionManager.RegisterViewWithRegion("TabRegion", typeof(View1));
regionManager.RegisterViewWithRegion("TabRegion", typeof(View2));

実際の問題は、実際のビューをレンダリングするためにそこにある DataTemplate 内の領域も定義したことです。最初は、DataTemplate 内で定義されたリージョンについて RegionManager に知らせるという問題に直面していましたが、この素晴らしい投稿の助けを借りて、この問題を解決しました。

XAML でのタブ定義:

<TabControl prism:RegionManager.RegionName="TabRegion">
    <TabControl.ContentTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="2" />
                    <ColumnDefinition Width="3*" />
                </Grid.ColumnDefinitions>
                <ContentControl Grid.Column="0" prism:RegionManager.RegionName="TabNavigationRegion" prism:RegionManager.RegionManager="{Binding Path=DataContext.RegionManager, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
                <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
                <ContentControl Grid.Column="2" prism:RegionManager.RegionName="TabContentRegion" prism:RegionManager.RegionManager="{Binding Path=DataContext.RegionManager, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
            </Grid>
        </DataTemplate>
    </TabControl.ContentTemplate>
    <TabControl.ItemContainerStyle>
        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Header" Value="{Binding RelativeSource={RelativeSource Self}, Path=Content.DataContext.TabModel.Title}" />
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>

この問題に対する最善の解決策または他の効率的な方法を教えてください。

4

1 に答える 1

0

「Prism Problems and Solutions: Mastering the TabControl」というタイトルの私の PluralSight コースでは、これを解決する方法を説明しています。

https://app.pluralsight.com/library/courses/prism-mastering-tabcontrol/table-of-contents

TabControl で RequestNavigate を使用できるようにするには、Prism を拡張する必要があります。

また、私のアドバイスは、DataTemplates を削除して、Views (UserControls) のみを使用することです。

于 2016-02-22T16:19:37.527 に答える