TabControl与区域PRISM

时间:2013-06-09 08:06:42

标签: wpf wpf-controls prism tabcontrol prism-4

我正在创建一个shell。 XAML只有TabControl。我正在尝试在按钮单击事件上创建新选项卡。使用我之前编写的代码,我可以在按钮单击事件上创建新选项卡,但Tab(区域)的内容仅显示在FIRST选项卡上,并且创建的新选项卡为空。即我无法在新创建的标签中显示相同的内容(区域)......

Shell.XAML

<TabControl Name="MyTabs" 
            Prism:RegionManager.RegionName="{x:Static inf:RegionConstants.MainRegion}">
</TabControl>
我希望添加到标签中的

UserControl

MainControls.XAML

<UserControl>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions> 

        <Grid x:Name="LeftGrid" Grid.Row="0" Grid.Column="0" Prism:RegionManager.RegionName="{x:Static inf:RegionConstants.InputRegion}">

        <GridSplitter>
        <Grid x:Name="RightGrid" Grid.Row="0" Grid.Column="0" Prism:RegionManager.RegionName="{x:Static inf:RegionConstants.OutputRegion}">
    </Grid>
</UserControl>

添加标签的功能

private void New_Tab(object sender, RoutedEventArgs e)
{
    TabItem tab = new TabItem();
    tab.Header = "New Tab";
    tab.Content = new MainControls();
    MyTabs.Items.Add(tab);
}

注册MainRegion的模块

class CollaboratedModule :IModule
{
    private IUnityContainer container = default(IUnityContainer);
    private IRegionManager regionManager = default(IRegionManager);

    public CollaboratedModule(IUnityContainer container, IRegionManager regionManager)
    {
        this.container = container;
        this.regionManager = regionManager;
    }

    public void Initialize()
    {
        if (this.container != default(IUnityContainer) &&
            this.regionManager != default(IRegionManager))
        {
            var IntergratedView = this.container.Resolve<MainControls>();

            this.regionManager.AddToRegion(RegionConstants.MainRegion, IntergratedView);
            this.regionManager.Regions[RegionConstants.MainRegion].Activate(IntergratedView);
        }
    }
}

同样,我创建了一个用于注册InputRegionOutputRegion的模块。任何人都可以让我知道此代码中的问题在哪里,我该如何解决?

1 个答案:

答案 0 :(得分:0)

试试这种方式

regionManager.RegisterViewWithRegion(RegionConstants.MainRegion, () => IntergratedView);