0

我有一个在 xaml 中描述的动态 WPF UI。

可以在下面看到 xaml。我的问题是我的自定义命名空间没有自动解析,

要加载 xaml,我必须将每个程序集及其命名空间设置为解析器上下文,如下所示

var context = new ParserContext();
context.XamlTypeMapper = new XamlTypeMapper(new string[] { });      

context.XmlnsDictionary.Add("Custom","http://myCompany.de");
context.XamlTypeMapper.AddMappingProcessingInstruction("http://myCompany.de","FooNamespace","FooAssemblyName");

没有更好的方法吗?我需要这个动态。而且我不想扫描应用程序域。

这是如何在普通的“System Xaml Reader”中完成的?

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:Custom="http://myCompany.de"
    x:Class="Foo.Container" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.DataContext>
        <Custom:FooViewModel/>
    </UserControl.DataContext>
    <Grid>

    </Grid>
</UserControl>
4

1 回答 1

2
Clr-Namespace URI's without an assembly mentioned only work as compiled Xaml.

但是,如果您为";assembly=AssemblyName"您的 Uri 提供带有命名空间的程序集,例如 - 后缀,它将被成功解析。

但是在您的情况下xmlns:Custom="http://myCompany.de",您不能添加程序集引用。所以,我认为唯一的出路是为这种情况手动添加映射。

对于属于您的项目的自定义命名空间,您可以使用assembly后缀来解析它们。

于 2012-11-15T15:04:05.070 回答