松散的XAML是依赖于引用的命名空间加载的.NET / CLR的版本?

时间:2014-08-25 17:47:50

标签: c# .net wpf xaml clr

我刚刚阅读了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 只是硬编码吗?

1 个答案:

答案 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。