为什么ItemsControl会显示一个视图,但ContentControl什么都不显示?

时间:2009-07-22 09:28:48

标签: wpf views prism itemscontrol contentcontrol

我有一个基于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什么都不显示?

3 个答案:

答案 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将延迟创建和显示视图,直到该区域可用。