2011-06-22 39 views
2

我正在用MEF创建一个新的Prism4应用程序,它工作的很好。我创建了Shell等,一切都很好。Microsoft Prism应用程序需要帮助

但现在我需要创建一个新的窗口地区内,但它似乎是一个区域不与RegionManager(见WINDOW_CLOSING事件)和区域的窗口工作登记以及因为显示了注入的视图。

这里的新窗口

代码Wizard.xaml

<DockPanel LastChildFill="True"> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" DockPanel.Dock="Bottom"> 
    <Button Content="_Previous" Margin="0, 0, 10, 0" /> 
    <Button Content="_Next" /> 
    </StackPanel> 
    <ContentControl cal:RegionManager.RegionName="WizardStepsRegion" /> 
</DockPanel> 

当我试图让窗口的地区,我得到了以下异常“KeyNotFoundException是由用户代码未处理”,“区域管理器不包含WizardStepsRegion区域。“

Wizard.xaml.cs

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    object asdf = regionManager.Regions["WizardStepsRegion"]; 
} 

为什么区域没有在大区经理注册?

有人可以帮助我吗?

谢谢。

+1

您是否在使用 创建shell?protected override DependencyObject CreateShell(){return Container.GetExportedValue (); } ?? – Bas

+0

在我之前的项目中,我们使用了Prism v2,这是一个噩梦得到这个工作。我希望v4的答案更简单。 –

回答

0

听起来你正在尝试创建一个对话框。你在导入那个对话框还是用new Wizard()创建它?如果您使用new运算符创建它,RegionManager将不知道任何关于它的信息。您可以使用SetRegionManager手动告诉RegionManager有关该窗口的信息。

RegionManager.SetRegionManager(window, myRegionManager); 

然后RegionManager会知道所有关于你的类型,发现其区域等的另一种选择是导入向导类型,只是.Show()它时,你想要的,但有时这是不实际的。

+0

是的,我正在创建一个新的对话框。下面是我如何创建它 向导向导=(向导)ServiceLocator.Current.GetInstance(typeof(向导)); wizard.ShowDialog(); 如果这为什么不切实际,我该如何做得更好? 谢谢。 – vcRobe

+0

还有一件事。我使用的是Prism v4,RegionManager没有这种方法。我如何在Prism v4中做到这一点?谢谢 – vcRobe

+0

@Robe:这不一定是错误或不切实际的。你只是有一个选择。你可以执行'new',然后调用'SetRegionManager',或者你可以创建'[Import] public Wizard Wizard {get;组; }'做'this.Wizard.ShowDialog();'这取决于你。 –