C# 在xaml中引用无命名空间类
我有一个没有名称空间的类(应该说,是在全局名称空间中声明的?) 可以从项目的其他类访问它,而无需指定任何名称空间,就像它位于同一名称空间中一样C# 在xaml中引用无命名空间类,c#,wpf,namespaces,C#,Wpf,Namespaces,我有一个没有名称空间的类(应该说,是在全局名称空间中声明的?) 可以从项目的其他类访问它,而无需指定任何名称空间,就像它位于同一名称空间中一样 namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { Test.Something = "bla"; // no problem
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
Test.Something = "bla"; // no problem
InitializeComponent();
}
}
}
现在我正试图从xaml访问这样的类。我也有问题
像这样输入它的名字
<TextBlock Text="{Binding Source={x:Static Test.Something}}"/>
将产生编译器错误
找不到类型“Test”。请注意,类型名称区分大小写
奇怪的是,intellisence认为这次一切都很好
将
Test
放入WpfApplication1
名称空间将使其能够正常工作。但我希望它没有名称空间
问题:如何在xaml中将全局命名空间声明为前缀?有一些没有命名空间的类真的那么糟糕吗?我的想法是在不同的项目中使用同一个类(作为一个类),而不制作dll(一个exe文件,我知道可以将dll嵌入exe,但很严重…)或复制cs文件(如果类必须更新,则需要同时编辑多个cs文件,非常糟糕)
我认为还有一种可能性可以证明这个问题。假设我们在不同的名称空间中声明了一些内容(例如,项目名称空间是
WpfApplication1
,但我们创建了类并在SomeNamespace
名称空间中声明它)。在项目类中访问程序集时,需要使用和或指定全名(包括名称空间,但不包括程序集)。但是,在xaml
中,我们只有一个类似于的选项,即使用clr名称空间。在xaml中直接在需要全名的地方指定全名,而不使用clr名称空间
,怎么样。有可能吗?非常尴尬,但实际上可以像xmlns:funky=“clr namespace:”
(注意空声明)那样声明XAML名称空间,然后将该类称为funky:Test
。它在设计时发出呜呜声,但它毫无例外地运行,并产生预期的行为(就我所能测试的而言)
PS:这个答案带来了一些其他问题…非常尴尬,但实际上可以像xmlns:funky=“clr namespace:”
(注意空声明)那样声明XAML名称空间,然后将该类称为funky:Test
。它在设计时发出呜呜声,但它毫无例外地运行,并产生预期的行为(就我所能测试的而言)
PS:这个答案带来了一些其他问题…非常尴尬,但实际上可以像xmlns:funky=“clr namespace:”
(注意空声明)那样声明XAML名称空间,然后将该类称为funky:Test
。它在设计时发出呜呜声,但它毫无例外地运行,并产生预期的行为(就我所能测试的而言)
PS:这个答案带来了一些其他问题…非常尴尬,但实际上可以像xmlns:funky=“clr namespace:”
(注意空声明)那样声明XAML名称空间,然后将该类称为funky:Test
。它在设计时发出呜呜声,但它毫无例外地运行,并产生预期的行为(就我所能测试的而言)
PS:这个答案带来了一些其他的问题……为什么你想要一个没有名称空间的类,而这几乎被普遍认为是一个坏主意?(在C#中没有在Java中那么糟糕,但这仍然是个坏主意。)您可以在不同的项目中使用同一个类,同时仍将其放在名称空间中……CLR名称空间和XAML名称空间不一样。要定义XAML名称空间,您需要有一个CLR名称空间。好的,所以没有解决问题的方法,因为有一个坏主意,这只在wpf中是不好的,对吗?@Sinatr抱歉,没有。人们不会到处“复制cs文件”。他们创建适当的可重用库(DLL)并引用它们。这根本不是C#通常的工作方式。您似乎有一种误解,即引用名称空间在某种程度上是困难的,而事实并非如此。既不是来自C#也不是来自XAML。我建议你完全重新考虑你的方法。如果所有的类都在同一个名称空间中,那将是一个巨大的混乱。名称空间正是为了为类型提供容器,以便将它们分开并组织起来。不使用它们会回到计算机科学的黑暗时代。这完全是一件尴尬的事情,但实际上可以像xmlns:funky=“clr namespace:”
(注意空声明)那样声明XAML名称空间,然后将该类称为funky:Test
。它在“设计时”会发出呜呜声,但它运行时没有异常。为什么你想要一个没有名称空间的类,而这几乎被普遍认为是一个坏主意?(在C#中没有在Java中那么糟糕,但这仍然是个坏主意。)您可以在不同的项目中使用同一个类,同时仍将其放在名称空间中……CLR名称空间和XAML名称空间不一样。要定义XAML名称空间,您需要有一个CLR名称空间。好的,所以没有解决问题的方法,因为有一个坏主意,这只在wpf中是不好的,对吗?@Sinatr抱歉,没有。人们不会到处“复制cs文件”。他们创建适当的可重用库(DLL)并引用它们。这根本不是C#通常的工作方式。您似乎有一种误解,即引用名称空间在某种程度上是困难的,而事实并非如此。既不是来自C#也不是来自XAML。我建议你完全重新考虑你的方法。如果所有的类都在同一个名称空间中,那将是一个巨大的混乱。名称空间正是为了为类型提供容器,以便将它们分开并组织起来。不使用它们将回到计算机科学的黑暗时代。这是非常尴尬的,但实际上您可以声明XAML名称空间
<TextBlock Text="{Binding Source={x:Static Test.Something}}"/>
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
...
<TextBlock Text="{Binding Source={x:Static local:Test.Something}}"/>