2012-10-18 89 views
0

我正在使用帶棱鏡和MEF的Silverlight 5。使用XamlReader.Load()從文件創建棱鏡區域時出錯?

我試圖通過讀取XAML文件來替換我在運行時外殼,從它創建一個的UIElement並更換舊殼的新的UIElement的內容。我正在使用XamlReader.Load()

這樣做,直到我嘗試創建棱鏡區域。

我可以創造一個新的外殼,在它只是一個棱鏡區域,但是當我在新殼兩個或兩個以上的區域,我得到的是在我的瀏覽器中的空白屏幕,並沒有錯誤消息。

有沒有辦法來調試呢?爲什麼會發生這種情況?

代碼:

創建的UIElement和更換外殼(在Shell.xaml.cs):

DependencyObject rootObject = XamlReader.Load(XAMLFileString) as DependencyObject; 
UIElement customShell = rootObject as UIElement; 
this.Content = customShell; 

此作品(一個區域):

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:prism="http://www.codeplex.com/prism"> 

    <StackPanel>    
     <ContentControl prism:RegionManager.RegionName="Region1"/> 
    </StackPanel> 

</UserControl> 

這也適用(兩個常規內容控件):

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:prism="http://www.codeplex.com/prism"> 

    <StackPanel> 
     <ContentControl Content="C1"/> 
     <ContentControl Content="C2"/> 
    </StackPanel> 
</UserControl> 

但是這給了我一個空白屏幕,而不是(二棱鏡地區):

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:prism="http://www.codeplex.com/prism"> 

    <StackPanel>    
     <ContentControl prism:RegionManager.RegionName="Region1"/> 
     <ContentControl prism:RegionManager.RegionName="Region2"/> 
    </StackPanel> 

</UserControl> 

回答

0

我想通了什麼問題是:實際上是有一個例外,但它在App.xaml.cs正默默地處理:

Microsoft.Practices.Prism.Regions.Behaviors.RegionCreationException: An exception occurred while creating a region with name 'Region1'. The exception was: System.ArgumentException: Region with the given name is already registered: 

引發異常是因爲我試圖創建一個名稱已存在於我的原始Shell中的區域。更改區域名稱後,一切正常。

我仍然不知道爲什麼我有一個白色的屏幕和一個區域而不是一個(兩個區域拋出同樣的異常使一個地區也應該不會管用)。

_regionManager.Regions.Remove(regionname) 

要替換用另一個具有相同的地區名稱殼,該區域可更換外殼之前被註銷