我在WPF中与其他几个“帮助”程序集一起工作,我有一个软件项目,结构如下:
在“控件”程序集中,有几个名称空间将相关类型的控件组合在一起。这使得管理哪个代码在此程序集中很容易,因为名称空间与文件夹名称相同。
但是,当我在项目的其他部分中使用这些控件时,这可能会有些混乱,特别是因为有时我必须在同一个文件中使用多个命名空间声明来引用“控件”程序集的不同部分。
我一直在想,将我的所有控件放在一个更集中的名称空间中是否更有意义,我可以在任何地方使用它。阻止这样做的障碍是,每次我使用该名称空间时,它都会引用程序集中的所有控件。然而,这将使我的XAML变得更干净。
那么,当我在XAML中导入名称空间引用时会发生什么呢?它的工作方式与C#一样吗?如果我周围坐着一堆未使用的参考资料,会发生什么?从性能的角度来看,如果我将所有的控件都放在同一个名称空间中,是否还可以呢?
或者,我是不是傻了,问错了问题?
发布于 2017-12-06 14:55:11
我一直在想,将我的所有控件放在一个更集中的名称空间中是否更有意义,我可以在任何地方使用它。
真的没必要这么做。
阻止这样做的障碍是,每次我使用该名称空间时,它都会引用程序集中的所有控件。..。那么,当我在XAML中导入名称空间引用时会发生什么呢?如果我周围坐着一堆未使用的参考资料,会发生什么?
没什么大不了的。XAML名称空间只是在编译时解析对象引用的机制.任何未使用的引用最终都会被编译器忽略。它对性能没有影响。
从性能的角度来看,如果我将所有的控件都放在同一个名称空间中,是否还可以呢?
性能也不会受到任何影响,但我建议保留现有的文件和文件夹结构。
您可以做的是使用XmlnsDefinitionAttribute将来自不同C#名称空间的控件放到同一个逻辑XAML命名空间中。此属性放置在AssemblyInfo.cs文件中,如下所示:
[assembly: XmlnsDefinition("http://mycompany.com/controls", "MyCompany.Controls.Core")]
[assembly: XmlnsDefinition("http://mycompany.com/controls", "MyCompany.Controls.Primitives")]在引用此程序集的程序集中,然后可以执行如下操作:
...
xmlns:mycontrols="http://mycompany.com/controls"
...
<mycontrols:Foo ... />
<mycontrols:Bar ... />因此,Foo控件可以驻留在C#名称空间MyCompany.Controls.Core中,而Bar控件可以驻留在C#名称空间MyCompany.Controls.Primitives中,但这两个控件都可以使用相同的XAML命名空间(http://mycompany.com/controls,这里使用mycontrols前缀别名)进行引用。
https://stackoverflow.com/questions/47665318
复制相似问题