我刚刚阅读了WPF Unleashed,它提到按钮看起来会有所不同,具体取决于所使用的XMLNS。
所以我尝试了下面的内容并且它正确地敲响了。
在此代码中加载了光泽按钮。
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel Height="40">
<Button Content="Button1"/>
</StackPanel>
</Page>
在此代码中加载了非光泽按钮。
<Page xmlns="http://schemas.microsoft.com/netfx/2009/xaml/presentation">
<StackPanel Height="40">
<Button Content="Button1"/>
</StackPanel>
</Page>
我只想弄清楚究竟发生了什么? 当它看到 ../ netfx / 2009 /...名称空间时, PresentationHost.exe 加载 4.0 CLR 只是硬编码吗?
答案 0 :(得分:3)
在PresentationFramework.dll
内,有一个使用XmlnsDefinitionAttribute
的映射。
当编译器命中命名空间时,它会查找与目标XAML命名空间匹配的指定dll:
[System.Windows.Markup.XmlnsDefinitionAttribute("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Media.Animation"),
System.Runtime.CompilerServices.CompilationRelaxationsAttribute(8)
如果它命中winfx/2006
,它将查找XAML 2006对应的dll。如果它命中netfx/2009
,它将查找XAML 2009 dll。