为什么我的区域经理中没有棱镜区域注册

  • 本文关键字:区域 注册 棱镜 c# prism
  • 更新时间 :
  • 英文 :


我正在尝试设置我的第一个棱镜应用程序。我有一个简单的MainWindowShell,它有一个contentControl,在这个区域中显示一个棱镜regionName和一个ViewA。现在我想从ViewA切换到ViewB,但导航有问题。一切似乎都很完美,但当涉及到regionManager.RequestNavigate(…)时,regionManager中没有registred区域,导航失败。我想我已经追踪到了这个问题,但我无法解决它。

我正在使用customControl。所以没有xaml。xaml来自resourceDictionary中的controlTemplate/样式,这似乎是问题所在。

我对一个userControl也做了同样的尝试,从controlTemplate复制了代码,瞧!我所在的地区完全登记在地区经理那里。但我不想使用userControls,因为每个viewElement都是通过样式和模板从resourceDictionary中自定义的。所以我会有很多空的无用的"xyUserControl.xaml"的

我想我本可以在stackoverflow(来自Custom RegionAdapter的Prism Regions未显示在RegionManager列表中)上为我的问题找到一个解决方案,或者至少找到一个变通方法。但我不知道在我的情况下该怎么做,也不知道这是否可能。因为解决方案是在代码背后设置regionManager,如下所示:RegionManager.SetRegionManager(targetContentControl,RegionManager);但是我的后台代码对xaml模板一无所知。所以我拼命地尝试:RegionManager.SetRegionManager(这个,RegionManager)。。。没用。我没有主意了。

这是资源字典:

<Style TargetType="{x:Type userControls:MainWindowShell}">
<Setter Property="Template" Value="{DynamicResource MainWindowShell}" />
</Style>
<ControlTemplate x:Key="MainWindowShell" TargetType="{x:Type userControls:MainWindowShell}">
<Grid>
<ContentControl regions:RegionManager.RegionName="{x:Static utilities:RegionNames.Content}">
</ContentControl>
</Grid>
</ControlTemplate>

和主窗口外壳:

public class MainWindowShell : Window
{
static MainWindowShell()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MainWindowShell), new FrameworkPropertyMetadata(typeof(MainWindowShell)));
}
public MainWindowShell(IMainMenuViewModel viewModel, IRegionManager regionManager)
{
this.DataContext = viewModel;
}
}

手动设置区域(从构造函数或其他地方)是可行的。

但是,您不能仅从其自动创建的字段中引用ContentControl,您必须在模板中使用GetTemplateChild及其零件名称查找它。

我怀疑shell(实际上是托管控件的任何区域)可能有点问题,因为按照惯例,您的控件将处理缺失的部分。你至少应该提醒那些创建主题的人,区域部分是强制性的。此外,添加那些TemplatePart属性。。。

最新更新