奇怪的导航Winrt / C#

时间:2014-11-18 09:06:32

标签: c# windows-runtime winrt-xaml

我在从一个页面导航到另一个页面时遇到了一种非常奇怪的行为。也许某人有一个线索可能是什么原因,因为我不知道;)

技术: 适用于Windows(手机)8.1的通用应用程序,带有XAML / C#

所以会发生什么:

  1. 用户从一个页面向前导航到另一个页面。
  2. 旧页面设置为NavigationCacheMode.Required,因为它应该保留它的状态和数据。
  3. 现在,如果通过单击" UI后退按钮"导航回来使用鼠标(Windows)或物理后退按钮(Windows Phone),它可以像预期的那样工作。 如果用户点击了" UI后退按钮"在Windows上通过触摸输入出现问题,这不会引起任何错误,或者现在甚至可以调试。
  4. 奇怪的事实是:

    1. 触发click事件并调用Frame.GoBack()
    2. OnNavigatingFrom()和OnNavigatedFrom()也被调用,缓存页面上的OnNavigatingTo()也是如此
    3. 但View reamins不变,我也可以与显示的页面进行交互
    4. 更令人恼火的是: 如果首先使用鼠标输入完成相同的导航,之后通过触摸完成,则它就像魅力一样。

      它可在Surface RT 1& amp; 2,戴尔Inspiron 15也带有触摸输入。

      不包含任何代码,因为我在命名事件或方法中没有做任何特别的事情,所以它是来自WinRT的简单标准框架导航

      我感谢每一个可能导致我理由的想法

1 个答案:

答案 0 :(得分:1)

花了几个小时进行调试和试用&错误,事实证明我的源页面上有一个问题(我尝试导航回来的那个)。 它包含一个带有嵌套垂直列表的水平列表,两者都使用某种虚拟化面板(ItemsStackPanelItemsWrapGrid

滚动任何嵌套的垂直列表后,发生inital以显示正确的项目,就会发生错误。删除初始滚动时,一切正常,直到用户手动滚动。似乎设置了某种UI锁定,这会阻止帧的导航。

一个完成它的工作的解决方案是用非虚拟化面板替换所有内部列表的面板。但这对我来说不是一个选择,因为性能很重要,可以显示大量数据。所以我最终会为该视图编写一个完整的自定义解决方案。

由于这不是我在ItemsStackPanel和ItemsWrapGrid中遇到的第一个错误,我只建议不要使用它们,直到你有一个简单的普通列表,其中只有一个项目类型。希望MS将在OS / SDK的后续版本中修复它们