c# - Frame.Navigate 到不同程序集中的 Page 派生类

标签 c# wpf xaml windows-phone-8 windows-phone-8.1

我想将基于 Windows Phone 8 空白应用程序模板的 View 保留在与包含应用程序 list 和 App.xaml 的程序集不同的程序集中。

我一直收到一个神秘的异常,它对解决问题毫无帮助:

  1. 从模板 Visual C# > Store Apps > Windows Phone Apps > Blank App (Windows Phone) 创建一个新项目。
  2. 构建和部署,效果很好。 MainPage.xaml 的属性表明生成操作是页面,这是正确的。
  3. 在包含原始项目的解决方案中的同一类别中,基于类库 (Windows Phone) 模板创建一个新项目,将其命名为 MyApp.Views
  4. 使用剪切和粘贴命令将 MainView.xaml 文件移动到新创建的项目。
  5. 将对 MyApp.Views 的引用添加到原始项目。
  6. 构建、部署、查看应用程序启动并无法定位 View ,只会将此异常传播回开发人员的盒子:ComException:错误 HRESULT E_FAIL 已从调用返回一个 COM 组件。 这并没有说任何有用的东西,顶部堆栈框架是 Windows.UI.Xaml.Controls.Frame.Navigate(Type sourcePageType, Object parameter) 下面第一个是 TheOriginalProject.App.OnLaunched(LaunchActivatedEventArgs e)

解决方案是不要将 NavigationService 与 pack URI 一起使用,因为它似乎在 Windows Phone 8 中不存在,或者至少在空白应用程序模板中默认情况下不会引用包含它的程序集。无论如何,与包 URI 相比,我更喜欢强类型的 View 名称。

我想肯定有人已经遇到过这个问题,问题是什么?是否有 API 或工具可以让我深入了解来自 COM 的最新 E_FAIL 是什么?

编辑:当使用 Window.Current.Content = new MainPage() 作为 OnLaunched 的唯一内容时,会弹出 XAML 解析器异常。它无法填充异常消息,但肯定会更好地提示正在发生的事情。仍然没有解决方案,不过,问题只转移到 MainPage 构造函数中的 this.InitializeComponent()

我现在看到的是 Windows.UI.Xaml.Markup.XamlParseException,其中包含解析器内部错误的 WinRT 信息:对象编写器“%0” 和无法执行的附加信息加载。 x:Class 属性出现在异常对话框窗口和 this thread 提示的位置 128 处。似乎相关,但我不知道如何。

请注意,我还会在确认没有收到我收到的错误的人身上找到值(value)。如果您已尝试重现问题的步骤但未能重现问题,请发表评论,以便我确定是什么导致了我正在努力解决的错误。

最佳答案

将 View 外部化到单独项目同时避免此问题的替代解决方案是使用共享项目项目类型,将 View 放在那里并从主项目引用它。

这不会为 View 生成单独的程序集,相反,文件只是在它们的自定义项目中分组,但在编译期间表现得好像它们是主项目的一部分。错误消失了,因为从编译器的角度来看,共享项目中的文件与直接在主项目中的文件没有区别。在运行时, View 的类型不需要从不同的程序集中解析,它就在同一个程序集中。

关于c# - Frame.Navigate 到不同程序集中的 Page 派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28071841/

相关文章:

C# 将单个字典的值组合到单个扩展列表中

c# - 使用 Setter 更新样式触发器中的自定义附加属性

c# - 子属性中的 DataContract 父引用 - 如何避免无限序列化循环

c# - 创建 Xamarin.Forms 跨平台应用程序时出现 "This project requires a Visual Studio update to load"错误

wpf - WPF 中带有示例数据的 ListBox 的设计时填充

wpf - 如何更改 WPF DataGridColumn 上的第一个排序方向

silverlight - XAML 绑定(bind) silverlight

xaml - 将 ScrollViewer 从 ViewModel 绑定(bind)到 View

WPF - 如何跳过选项卡导航中的标签?

c# - 创建现有 c# 类的扩展 'copy'