选项卡控件内的WPF Prism区域不在区域列表中

时间:2012-04-18 07:44:34

标签: wpf wpf-controls prism enterprise-library tabcontrol

我有一个附加了区域的标签控件,我的标签控件内容中还有一个内容控件与另一个区域。

我遇到的问题是 - 如果我调用RegisterViewWithRegion,它会将视图添加到该区域没有问题(第一次是,如果交换选项卡会出现问题)。但这不是很灵活,我正在寻找一种更好的方法来做到这一点。

当我查看IRegionManager.Regions时 - 我只能看到两个顶级区域。我看不到我的子区域 TabContentRegion 。有没有办法注册这个,所以我可以通过添加视图和激活它们的常规方式工作?

   <TabControl TabStripPlacement="Left"
            Width="Auto"
            Height="Auto"
            cal:RegionManager.RegionName="TabRegion"
            Name="TabRegion"
            SelectedItem="{Binding SelectedTab}">
    <TabControl.ContentTemplate>
        <DataTemplate>

            <ContentControls:TransitionContentControl 
                cal:RegionManager.RegionName="TabContentRegion" />

        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

此代码将视图添加到TabRegion

 public void Load()
 {
     IConfigurationDetailsPresentationModel convDetailsView1 =
         this.Container.Resolve<IConfigurationDetailsPresentationModel>();

     IRegionManager manager = this.Container.Resolve<IRegionManager>();
     manager.RegisterViewWithRegion("TabRegion", () => convDetailsView1);

     IConversationDetailsPresentationModel conversationDetails = 
         this.Container.Resolve<IConversationDetailsPresentationModel>();
     manager.RegisterViewWithRegion("TabRegion", () => conversationDetails);
 }

然后这是我用来实际显示TabContentRegion中的视图的代码

 public IPresentationModel SelectedTab
 {
     get { return _selectedTab; }
     set
     {
         _selectedTab = value;

         IRegionManager service = this.Container.Resolve<IRegionManager>();

         if (service != null)
         {
             service.RegisterViewWithRegion(
                 "TabContentRegion",
                 () => _selectedTab.View);
         }
     }
 }

正如你所看到的那样 - 它有点笨拙并且不太有用。我有什么想法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过大量的游戏和谷歌搜索,我终于遇到了回答!

因为该区域位于数据窗口内,因此棱镜标准行为不会将其拾取并将其注册到区域管理器。

使用提供的代码here,它帮助我解决了这个问题并继续正常进行! :)

欢呼声。 STE。