我有一个包含另一个Region的Region的PopUp。通过WPF Prism(MEF)InteractionRequest方法调用此弹出窗口。结构如下:
PopUpUserControl
- ContentControl : Region(UserCatalogsCreateRegion)
- PopUpStageUserControl
- StackPanel
-ContentControl : Region(UserCatalogsCreateStackRegion) <--Disappearing Region
问题表现在这样。当应用程序启动并正常运行时,我可以列出应用程序中的Regions,我可以看到RegionManager包含名为&#34; UserCatalogsCreateStackRegion&#34;的区域。
现在,当我单击为PopUpCreation设置InteractionRequest的按钮时,我可以看到Regions列表不再包含&#34; UserCatalogsCreateStackRegion&#34;。我验证了某些内容正在删除我的Region,因为我在RegionManager的Regions属性中添加了一个CollectionListener,并且一旦创建了Popup,我的断点就被命中,Notif..Action是&#34;删除&#34;而OldItem是有问题的区域。
TL;当创建并调用包含所述Region的弹出窗口时,DR Region将从RegionManager.Regions中消失。
非常感谢任何帮助。我将尝试回答尽可能多的其他问题,因为区域经理可能会出现问题。
修改
Brian Lagunas&#39;链接指向了doggone解决方案。这是解决方案。我对PopUpStageControl的最终工作代码如下所示,其中ContentControl是保持&#34;消失的区域&#34;:
[ImportingConstructor]
public PopUpStageUserControl(IRegionManager regionManager)
{
InitializeComponent();
this.regionManager = regionManager;
//Fix Begin
RegionManager.SetRegionName(ContentControl, AppRegions.UserCatalogsCreateStackRegion);
RegionManager.SetRegionManager(ContentControl, regionManager);
//Fix End
RegionManager.SetRegionManager(this, regionManager);
RegionManager.UpdateRegions();
}
答案 0 :(得分:2)
这是因为弹出窗口不是可视树的一部分,因此区域管理器将无法找到该区域。您必须手动注册该区域。见这些帖子:
Region not loaded by the RegionManger
How to register regions inside user controls or control templates in RegionManager?
答案 1 :(得分:0)
取消我的评论,然后快速推出Google result(旧版PRISM)。
IRegionMemberLifetime接口:另请注意,ModuleARibbonTab类实现了IRegionMemberLifetime接口。此接口由Prism提供,它控制当用户离开视图时是否从区域中删除视图。
根据它的声音,您可能希望实施IRegionMemberLifetime
并相应地设置KeepAlive
,这可能会影响RegionManager
何时删除/保留该区域。
答案 2 :(得分:0)
虽然您没有在发布的代码中说明,但我认为您在设置InteractionRequest时使用的是这样的内容:
<prism:PopupWindowAction.WindowContent>
<inf:PopUpStageUserControl/>
</prism:PopupWindowAction.WindowContent>
所以你必须要知道,在运行时Prism会用你在PopupWindowAction.WindowContent中指定的内容替换所有弹出内容。