我的 WPF 命名空间去哪儿了?





5.00/5 (3投票s)
解决更改命名空间名称时出现的一些问题
在工作中,我们正在使用一个 WPF GUI,但从一些旧代码中调用它。为了使它工作,我们不得不绕过一些关于应用程序和主窗口显示的问题。但这篇文章不是关于这些的。我现在正在进行的新项目是将同一个 WPF 应用程序移回成为运行的主要应用程序。但是,我在运行它时发现了一个小的命名空间问题。
由于App.xaml没有被运行,旧代码实际上直接调用了App
类,然后创建并显示了主窗口。在此期间,实施了一项新策略,我们将命名空间更改为首先包含公司名称。所以,MyProduct
在所有地方都变成了MyCompany.MyProduct
。
在我将 WPF 转换回独立应用程序的过程中,我将项目类型改回WinExe
,并在App
类的构造函数中设置了一个断点。断点从没被命中,而是直接跳转到了Window1
的构造函数。我在那个构造函数中有一些重要的资源调用,必须在代码其余部分中的内容被调用之前调用。为什么它没有命中断点?
所以在Window1
类中,我获取了当前应用程序的副本,并尝试在其上调用一些内容来设置我需要的资源。但是,当我这样做时
MyCompany.MyProduct.App app = (MyCompany.MyProduct.App)Application.Current ;
我收到一个错误,说它无法将MyProduct.App
转换为MyCompany.MyProduct.App
。这很奇怪。花了一段时间才弄清楚App.xaml文件和App.xaml.cs文件具有不同的命名空间。XAML 文件从未将MyCompany
名称添加到命名空间中。这之所以有效,是因为以下几点。我们直接调用了App
类,而不是让项目文件为我们选择它。第二点是,如果你查看新 WPF 项目中的新App
类,你会看到构造函数是空的。这意味着实际上没有什么可以连接 XAML 创建的部分类和它的xaml.cs部分。对于任何窗口类,构造函数都有一个对InitializeComponent
的调用。如果命名空间不同步,窗口的xaml.cs在编译时会报错。在App.xaml文件中修复命名空间后,一切都很好。程序运行了,然后我就有很多其他工作要做。但这又是另一个故事了。