处理WPF TabControl中的PRISM区域

时间:2016-02-21 09:57:52

标签: wpf xaml prism tabcontrol prism-5

我正在使用WPF PRISM并寻找一种优雅的方法来添加TabItem,以便我可以使用RequestNavigate进行导航。

我已经使用以下代码实现了这一点,但View1View2并不是实际的观点,实际上这些只是帮助显示标题。

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

实际问题是我还在DataTemplate中定义了用于呈现实际视图的区域。最初我遇到了让RegionManager知道我在DataTemplate中定义的区域的问题,但是在great post的帮助下我解决了这个问题。

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>

请建议最佳解决方案或任何其他有效解决此问题的方法?

1 个答案:

答案 0 :(得分:-4)

我的PluralSight课程题为“棱镜问题和解决方案:掌握TabControl”,向您展示如何解决这个问题。

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

您必须扩展Prism以允许使用带有TabControl的RequestNavigate。

另外,我的建议是删除DataTemplates并使用Views(UserControls)。