繁体   English   中英

xaml中的引用无名称空间类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM