【问题标题】:Strange navigation Winrt/C#奇怪的导航 Winrt/C#
【发布时间】:2014-11-18 09:06:31
【问题描述】:

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

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

那么会发生什么:

  1. 用户从一个页面向前导航到另一个页面。
  2. 旧页面设置为 NavigationCacheMode.Required,因为它应该保留其状态和数据。
  3. 现在,如果使用鼠标 (Windows) 或物理后退按钮 (Windows Phone) 单击“UI 后退按钮”进行导航,则可以正常工作。 如果用户通过触摸输入在 Windows 上单击“UI 后退按钮”,则会出现问题,但不会引发任何错误,甚至现在可以调试。

奇怪的事实是:

  1. 触发点击事件并调用 Frame.GoBack()
  2. OnNavigatingFrom() 和 OnNavigatedFrom() 也被调用,缓存页面上的 OnNavigatingTo() 也是如此
  3. 但视图保持不变,我也可以与显示的页面进行交互

更烦人的是: 如果相同的导航首先通过鼠标输入完成,然后通过触摸完成,它就像一个魅力。

它可以在 Surface RT 1 和 2 上重现,也可以在带有触摸输入的 Dell Inspiron 15 上重现。

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

我很感激每一个能引导我找到原因的想法

【问题讨论】:

    标签: c# windows-runtime winrt-xaml


    【解决方案1】:

    经过几个小时的调试和反复试验,结果发现我的源页面(我尝试返回的那个页面)存在问题。 它包含一个带有嵌套垂直列表的水平列表,两者都使用某种虚拟化面板(ItemsStackPanelItemsWrapGrid

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

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

    由于这不是我在使用 ItemsStackPanel 和 ItemsWrapGrid 时遇到的第一个错误,所以我只建议在您拥有一个只有一个项目类型的简单纯列表之前不要使用它们。希望 MS 在以后的 OS/SDK 版本中修复它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多