奇怪的导航Winrt / C#

本文关键字:Winrt 导航 | 更新日期: 2023-09-27 18:30:50

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

科技:通用应用程序 Windows (Phone) 8.1 wth 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上重现。

不包含代码,因为我在命名事件或 mehtods 中没有做任何特别的事情,所以它是 WinRT 的普通标准帧导航

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

奇怪的导航Winrt / C#

在花了几个小时进行调试和反复试验后,事实证明我的源页面(我尝试导航回的页面)存在问题。它包含一个水平列表与嵌套的垂直列表,两者都使用某种虚拟化面板(ItemsStackPanel和ItemsWrapGrid)

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

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

由于这不是我在ItemsStackPanel和ItemsWrapGrid中遇到的第一个错误,因此我只能建议不要使用它们,直到您有一个只有一种项目类型的简单纯列表。希望MS能在更高版本的OS/SDK中修复它们