我有一个基于Prism的应用程序。
这是我的shell:
<Window x:Class="AvarioCRM3.ShellV2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.codeplex.com/CompositeWPF" >
<DockPanel LastChildFill="True">
<Border
Padding="10"
DockPanel.Dock="Top"
Background="#ddd">
<DockPanel>
<ItemsControl
Name="MainNavigationPanel"
cal:RegionManager.RegionName="MainNavigationPanel"
DockPanel.Dock="Top"/>
</DockPanel>
</Border>
</DockPanel>
</Window>
在我的 MenuModule 中,我添加了一个区域视图,它显示正常:
public void Initialize()
{
MainNavigationPresenter mainNavigationPresenter = this.container.Resolve<MainNavigationPresenter>();
IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"];
mainRegion.Add(new TestView());
}
问题是:我不想在我的shell中使用 ItemsControl ,我想要一个 ContentControl ,但是当我使用ContentControl时,它什么也没有显示。
为什么ItemsControl会显示我的观点而ContentControl什么都不显示?
答案 0 :(得分:1)
这可能是因为ContentControl只显示一个子节点,而ItemsControl有多个子节点吗?
我没有和Prism合作过,但API表明IRegion预计会有多个孩子。如果您正在使用ContentControl,那么当我执行以下操作时会发生一些不明确的事情:
IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"];
mainRegion.Add(new TestView());
mainRegion.Add(new SecondTestView());
答案 1 :(得分:1)
与带有ContentControl的ItemsControl不同,您还需要在添加视图后激活视图以使其可见。
MainNavigationPresenter mainNavigationPresenter = this.container.Resolve<MainNavigationPresenter>();
IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"];
TestView view = new TestView()
mainRegion.Add(view);
mainRegion.Activate(view);
答案 2 :(得分:0)
我注意到你在Initialize中这样做了。可能太早了?您是否尝试过使用注册而不是注入视图来查看是否有任何改变?
regionManager.RegisterViewWithRegion("MainNavigationPanel", typeof(TestView));
这不会解决您的问题,但是它会证明问题是在您的区域实际可用之前尝试添加内容。 RegisterViewWithRegion将延迟创建和显示视图,直到该区域可用。