2009-07-22 133 views
0

我有一個基於棱鏡的應用程序。爲什麼ItemsControl會顯示一個視圖,但ContentControl什麼也不顯示?

這是我的外殼:

<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()); 
} 

的問題是:我不想要的ItemsControl在我的shell中,我想要一個ContentControl,但是當我使用ContentControl時,它什麼也沒有顯示。

爲什麼ItemsControl顯示我的視圖和ContentControl什麼也不顯示?

回答

1

這是因爲一個ContentControl將只顯示一個孩子,而一個ItemsControl有多個孩子?

我一直沒有與棱鏡,但API表明,IRegion預計有多個孩子。如果你使用的是ContentControl,那麼它會有點模棱兩可,當我執行以下操作時會發生什麼:

IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"]; 
mainRegion.Add(new TestView()); 
mainRegion.Add(new SecondTestView()); 
+0

TestView將顯示,然後SecondTestView將被添加,然後異常可能會上升。如果沒有,那麼行爲就是你永遠不會看到SecondTestView。 – Rick 2009-07-23 15:43:09

0

我注意到你在Initialize中這樣做。可能爲時過早?您是否嘗試過使用註冊而不是注入您的視圖來查看是否改變了任何內容?

regionManager.RegisterViewWithRegion("MainNavigationPanel", typeof(TestView)); 

這不會解決你的問題,但它會證明這個問題是試圖添加的東西在你的區域實際上是可用的。 RegisterViewWithRegion會延遲視圖的創建和顯示,直到區域可用。

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);