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}}"/>