0

我正在使用复合应用程序指南(第 2 版,2009 年 2 月)。

我已经用一个区域构建了 Shell,一个 Bootstrapper 和一个具有两个视图的 Employee Module,我希望 RegionManager 将这两个视图都添加到 shell 中的一个区域。

但是,该区域中仅显示添加到 RegionManager 的最后一个视图。

我需要更改什么以便两个视图都显示在 Shell 的区域中?

namespace EmployeeModule
{
    public class EmployeeModule : IModule
    {
        private readonly IRegionManager _regionManager;

        public EmployeeModule(IRegionManager regionManager)
        {
            _regionManager = regionManager;
        }

        public void Initialize()
        {
            _regionManager.RegisterViewWithRegion(Infrastructure.RegionNames.MainRegion, typeof(Views.EmployeesView.EmployeesView));
            _regionManager.RegisterViewWithRegion(Infrastructure.RegionNames.MainRegion, typeof(Views.EmployeesListView.EmployeesListView));
        }
    }
}
4

2 回答 2

3

好吧,我不确定您的解决方案是否完全正确;这绝对是丑陋的。我相信您遇到的问题是您将网格或画布标记为区域。这很好,但是在这些情况下元素会自己隐藏起来,除非您能够为 Canvas 指定 X 和 Y 偏移或为 Grid 指定列/行。

Prism 为区域提供了三种类型的适配器。请参阅MSDN

  1. 内容控制区域适配器。此适配器适应 System.Windows.Controls.ContentControl 类型的控件和派生类。
  2. 选择器区域适配器。此适配器适配派生自 System.Windows.Controls.Primitives.Selector 类的控件,例如 System.Windows.Controls.TabControl 控件。
  3. 项目控制区域适配器。此适配器适应 System.Windows.Controls.ItemsControl 类型的控件和派生类。

这意味着您可以在任何 ContentControl(显示一个 Content 元素的控件)、显示多个内容元素并具有所选项目概念的 Selector 和 ItemsControl 之上使用区域,它只是一个显示多个对象。

我相信您的问题的解决方案是使用 ItemsControl,它会自动调整大小以显示您的所有视图。

于 2009-03-10T14:20:53.723 回答
0

请允许我回答我自己的问题:

上面的 RegionManager 代码工作正常。

您必须从视图中的 UserControl 元素中去掉widthheight属性,否则它们会相互覆盖。

于 2009-03-10T14:10:55.320 回答