[英]Reference namespaceless class in xaml
我有一个没有名称空间的类(应该说,在全局名称空间中声明了吗?)
public static class Test
{
public static string Something { get; set; }
}
可以从项目的其他类访问它,而无需指定任何名称空间,就像它位于同一名称空间中一样
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
Test.Something = "bla"; // no problem
InitializeComponent();
}
}
}
现在,我正在尝试从xaml访问此类。 而且我有问题。
像这样输入名称
<TextBlock Text="{Binding Source={x:Static Test.Something}}"/>
给出智力错误
WPF项目不支持测试。
尝试添加clr-namespace
<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}}"/>
会产生编译错误
找不到类型“测试”。 请注意,类型名称区分大小写。
足够奇怪的是,智慧认为这次一切都还好
将Test
放入WpfApplication1
命名空间将使其正常工作。 但是我想要没有命名空间的它。
问题:如何在xaml中将全局名称空间声明为前缀? 难道真的那么坏有一些类没有命名空间? 我的想法是在不同的项目中使用相同的类(作为链接 )而不制作dll(一个exe文件,我知道可以将dll嵌入exe,但是很严重...)或复制cs文件(需要同时进行)如果必须更新类,则编辑多个cs文件,这很糟糕)。
尽管我有更多的可能性来证明问题。 假设我们在不同的命名空间中声明了一些内容(例如,项目命名空间为WpfApplication1
,但是我们创建了类并在SomeNamespace
命名空间中进行了声明)。 在项目类内部访问全名 (包括名称空间,但不包括程序集)时,将需要使用using
或指定全名 (包括名称空间,但不包括程序集)。 但是,在xaml
我们只有与using
类似的选项-它是clr-namespace
。 直接在需要的地方直接在xaml中指定全名而不使用clr-namespace
怎么办? 可能吗?
完全很尴尬,但是实际上您可以像xmlns:funky="clr-namespace:"
这样声明XAML命名xmlns:funky="clr-namespace:"
(注意为空声明),然后将该类称为funky:Test
。 它在设计时到处都是抱怨,但它毫无例外地运行并产生了预期的行为(就我所能测试的而言)。
PS:这个答案带来了其他一些问题...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.