我将 Silverlight 5 与 Prism 和 MEF 一起使用。
我试图通过读取 XAML 文件在运行时替换我的 shell,从中创建一个 UIElement 并用新的 UIElement 替换旧 shell 的内容。我正在使用XamlReader.Load()
这个。
这有效,直到我尝试创建 Prism 区域。
我可以创建一个只有一个棱镜区域的新外壳,但是当我在新外壳中有两个或更多区域时,我得到的只是浏览器中的一个空白屏幕,并且没有错误消息。
有没有办法调试这个?为什么会这样?
代码:
创建 UIElement 并替换 shell(在 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>