【发布时间】:2013-09-24 07:47:22
【问题描述】:
我有 Wpf Prism 应用程序和模块。我想创建许多由同一模块填充的窗口。但我犯了这个错误:
创建名为“PriceWindowRegion”的区域时发生异常。例外是:System.ArgumentException:具有给定名称的区域已注册
我该如何解决这个问题?
谢谢,
【问题讨论】:
-
您应该至少添加发生错误的代码。
我有 Wpf Prism 应用程序和模块。我想创建许多由同一模块填充的窗口。但我犯了这个错误:
创建名为“PriceWindowRegion”的区域时发生异常。例外是:System.ArgumentException:具有给定名称的区域已注册
我该如何解决这个问题?
谢谢,
【问题讨论】:
您需要在窗口中使用一个作用域区域,因为它们都共享相同的IRegionManager。此外,请确保您的用户控件将其PartCreationPolicy 属性设置为NonShared。
MSDN 提供了有关如何创建同一区域的多个实例的文档 http://msdn.microsoft.com/en-us/library/ff921098%28v=pandp.40%29.aspx#sec42
作用域区域仅适用于视图注入。你应该使用 如果您需要一个视图来拥有自己的区域实例,请使用它们。意见 定义带有附加属性的区域自动继承 他们父母的 RegionManager。通常,这是全局 在 shell 窗口中注册的 RegionManager。如果 应用程序创建该视图的多个实例,每个实例 将尝试向父 RegionManager 注册其区域。 RegionManager 只允许唯一命名的区域;因此, 第二次注册会产生错误。
IRegion detailsRegion = this.regionManager.Regions["DetailsRegion"];
View view = new View();
bool createRegionManagerScope = true;
IRegionManager detailsRegionManager = detailsRegion.Add(view, null,
createRegionManagerScope);
Add 方法将返回视图可以使用的新 RegionManager 保留 [原文如此] 以进一步访问本地范围。
【讨论】: