为什么XAML(WPF)不在我的XML名称空间定义中搜索控件?

本文关键字:定义 空间 搜索 控件 XML WPF XAML 我的 为什么 | 更新日期: 2023-09-27 18:08:33

我有两个类似的项目。一个是Silverlight项目,另一个是WPF项目。它们都包含一些名称空间和大量自定义用户控件。

由于控件分布在许多名称空间上,因此在使用它们时必须定义相当多的名称空间。所以我开始在AssemblyInfo.cs:

中定义XML命名空间
[assembly: XmlnsPrefix("http://ui.example.com/xaml/touch", "cui")]
[assembly: XmlnsDefinition("http://ui.example.com/xaml/touch", "example_ui.controls")]
[assembly: XmlnsDefinition("http://ui.example.com/xaml/touch", "example_ui.themes")]

现在我必须在每个文件中只定义一个命名空间:

xmlns:cui="http://ui.example.com/xaml/touch"
不幸的是,这个只有在Silverlight中有效。我的问题是,如何让它在WPF项目中工作?在WPF项目中,我得到这样的错误:
Error   5   The tag 'LookUpField' does not exist in XML namespace
   'http://ui.example.com/xaml/touch'. Line 7 Position 14.  D:'src'prototype'lookup-control'lookup-control'MainWindow.xaml  7   14  lookup-control

为什么XAML(WPF)不在我的XML名称空间定义中搜索控件?

虽然该教程适用于Silverlight,但我认为它可能不适合WPF。

我在WPF中有一个单独的自定义控件程序集,我可以毫无问题地使用XmlnsDefinition属性。我认为问题在于在构建程序集之前需要存在的定义。因此,即使控件将显示在您的设计器中,它也无法构建,因为编译器在用BAML编译XAML时需要定义,这些定义稍后会内置到程序集中。

编辑

我创建了另一个WPF用户控制库,并添加了您使用的相同的XmlnsDefinition s,将用户控制库的引用添加到我的WPF应用程序项目中,在我的MainWindow.xaml中使用<cui:UserControl1 />,没有错误。