0

我有两个单独运行良好的 WPF 应用程序(比如 App1 和 App2)。我决定我希望能够从 App1 实例化并打开 App2 的主窗口,这样我就可以将 App1 用作两个应用程序的开始屏幕。我通过在 Visual Studio 的 App1 项目中添加对 App2 的引用并在 Using 语句中添加其命名空间来做到这一点。在大多数情况下,这工作正常,除了一件事。

这两个应用程序都包含一个名为 Storeid 的公共变量,该变量在 App.xaml.cs 中声明。我用来访问它的代码如下:

        Application TheApp = App.Current;
        App MyApp = TheApp as App;
        _storeid = MyApp.Storeid;

这段代码是从 App2 的主窗口的构造函数中调用的。

当 App2 独立运行时,此代码可以正常工作。但是,当从 App1 实例化同一个窗口时,它会失败。第一行工作正常,但是当它到达第二行时,强制转换返回 Null,因此第三行由于空引用异常而失败。

现在,我意识到 App.Current 在这两种情况下会有所不同。我希望它在独立运行时使用 App2 中的 App.Current(以及 App 的定义),并在从 App1 实例化时使用 App1 中的 App.Current 和 App。这两个 App.xaml.cs 都有 Storeid 公共变量,所以我希望代码可以正常工作。我只是不明白为什么当我在第二行将 TheApp 转换为 App 时,转换会产生一个空值。

4

1 回答 1

0

可能是因为即使它们的名称相同,App2 中的 Type App 与 App1 中的 Type App 也不同。由于正在运行的应用程序是 App2,因此您尝试将 App1 的 App Type 的实例转换为 App2 的 App Type。结果为空。

也就是说,App2 正在尝试将 App.Current 转换为 App2 的 App Type。但是属性的类型是 App1 的 App Type。我希望这很清楚。

您将不得不在 App2 的您发布的代码副本中确定哪个 App 类型是 App.Current 的类型,如果它是 App1 的 App 类型而不是 App2 的 App 类型,则使用不同的逻辑取消引用商店 ID。

于 2014-04-18T15:03:53.560 回答