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

Rob*_*bin 7 c# xml silverlight wpf xaml

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

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

[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")]
Run Code Online (Sandbox Code Playgroud)

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

xmlns:cui="http://ui.example.com/xaml/touch"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这适用于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
Run Code Online (Sandbox Code Playgroud)

Kcv*_*vin 1

尽管该教程适用于 Silverlight,但我相信它对于 WPF 可能不准确。请参阅此处接受的答案。

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

编辑

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