Wpf 是否可以在代码隐藏中声明命名空间
是否可以声明如下名称空间:Wpf 是否可以在代码隐藏中声明命名空间,wpf,xaml,Wpf,Xaml,是否可以声明如下名称空间: <Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="MyApp.MainWindow"/> 目的:减少冗长;在一个位置声明名称空间并使用继承 编辑:我试着添加 [assembly: XmlnsDefinition("http://mycompany/myapp", "clr-namespace:MyApp.Controls")] [assembl
<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyApp.MainWindow"/>
目的:减少冗长;在一个位置声明名称空间并使用继承
编辑:我试着添加
[assembly: XmlnsDefinition("http://mycompany/myapp", "clr-namespace:MyApp.Controls")]
[assembly: XmlnsPrefix("http://mycompany/myapp", "myc")]
至AssemblyInfo.cs
但构建结束时出现错误“未定义名称空间前缀“myc”
因此,我在xaml文件所在的同一项目中使用attirbutes。不,名称空间是的一部分,与xaml/.Net无关 如果名称空间是在代码隐藏中声明的,则XAML将不是有效的XML文档。在引用程序集的代码中,有一个Uri映射到代码名称空间:
[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")]
您可以包括这些属性中的多个,通常是在AssemblyInfo.cs
中,允许Xaml中的单个Uri命名空间引用多个代码命名空间
例如,如果将反编译器指向PresentationCore
程序集,则可以在程序集级别看到如下属性:
[assembly: XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Ink")]
这就是Uri导入映射到代码名称空间的方式
(完全公开:我的答案来自我之前对一个类似问题的回答。)
不那么详细,但必须进入另一个文件才能知道对象来自哪个名称空间,这会很烦人<代码>@Vache:我认为这取决于使用情况。如果在不同(程序集)名称空间中有一个程序集,其中包含了大量的通用Xaml组件,那么使用单个(xml)名称空间引用整个程序集是很方便的。类似地,如果项目复杂,则可以通过单个xml命名空间引用多个程序集。不是这样。马上看我的答案……:)哈我实际上已经使用了这个属性,但忘记了它。好的调用+1。可能不完全正确,但XML毕竟需要ns和前缀声明,我的目标是在一个不可能的中心位置消除它。我还需要XmlnsPrefix
属性。请参阅我的编辑:它似乎不是开箱即用的。我不确定您做了什么,但是,一旦添加了XmlnsDefinition
属性,您仍然需要声明xmlns:foo=http://mycompany/myapp
在xaml的根元素中。你包括了吗?您不需要xmlnprefix
来实现此功能。是的,使用前缀声明可以实现此功能,但我的想法是同时声明前缀,但这种方式似乎不起作用。您可以声明默认前缀以供序列化使用,但仍必须在XAML文件中声明命名空间和前缀。
[assembly: XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Ink")]