我正在构建一个WP8应用程序。在我的应用程序的初始页面(登录后),我使用GestureService来操作屏幕并创建滑出菜单的效果。这一切都很好,但问题是每当对应用程序的任何其他页面上的ListPicker控件执行滑动操作时都会激活GestureService,并抛出未处理的Object引用未设置异常,如下所示:
我已经做了一些挖掘,这似乎是WP工具包中的一个错误。 WP8仿真器和我正在使用的诺基亚WP8开发电话的行为是相同的。根据{{3}}线程,我可以使用ManipulationDelta和ManipulationCompleted事件来实现GestureListener所做的事情。所以我注释掉了GestureService代码并将Manipulation事件添加到主页面的网格上。低,看,问题已经消失。
这是GestureService调用(在我的初始xaml页面上),现在已注释掉:
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener DragDelta="GestureListener_OnDragDelta" DragCompleted="GestureListener_OnDragCompleted" />
</toolkit:GestureService.GestureListener>
我现在面临的问题是将代码转换为新格式。这是我正在使用的手势代码(在VB中):
If e.Direction = System.Windows.Controls.Orientation.Horizontal AndAlso e.HorizontalChange > 0 AndAlso Not _isSettingsOpen Then
Dim offset As Double = _feContainer.GetHorizontalOffset().Value + e.HorizontalChange
If offset > _dragDistanceToOpen Then
Me.OpenSettings()
Else
_feContainer.SetHorizontalOffset(offset)
End If
End If
If e.Direction = System.Windows.Controls.Orientation.Horizontal AndAlso e.HorizontalChange < 0 AndAlso _isSettingsOpen Then
Dim offsetContainer As Double = _feContainer.GetHorizontalOffset().Value + e.HorizontalChange
If offsetContainer < _dragDistanceToClose Then
Me.CloseSettings()
Else
_feContainer.SetHorizontalOffset(offsetContainer)
End If
End If
并非GestureListener中的所有属性都可用/可与Manipulation事件相媲美。
所以我最好在战斗中尝试重新创造效果(如果可能的话),或者有人知道更好的方法吗?即修复或规避错误以使GestureService工作的方法......?
我已经尝试添加GestureListener代码并将Try Catch语句清空到具有ListPicker控件的页面,但它没有解决问题。
在另一个(相关的)注释中,我可以通过在App.Xaml中将异常设置为Handled来避免错误。那里还有一个未处理的例外,我只是忽略它。这种行为是否可能导致我的应用从商店被拒绝?
感谢任何帮助。
答案 0 :(得分:1)
好的,这么低的观点并且几乎没有回复这个差不多一个星期,所以这是我通过谷歌发现这个问题的临时解决方案。
在app.xaml中,我只是阻止未处理的异常向用户显示消息:
Public Sub Application_UnhandledException(ByVal sender As Object, ByVal e As ApplicationUnhandledExceptionEventArgs) Handles Me.UnhandledException
' Show graphics profiling information while debugging.
If Diagnostics.Debugger.IsAttached Then
'There is a bug in the WP Toolkit which throws an unhandled exception when GestureListener events are used within the app,
'and a ListPicker control is swiped over. Altering this method ignores these exceptions.
'Diagnostics.Debugger.Break()
e.Handled = True
Else
e.Handled = True
'MessageBox.Show(e.ExceptionObject.Message & Environment.NewLine & e.ExceptionObject.StackTrace,
' "Error", MessageBoxButton.OK)
End If
End Sub
这当然不是一个理想的灵魂,但是我唯一想出的就是花费无数个小时试图绕过Toolkit bug。自上次发布以来已经有一段时间了,所以希望它能在下一个版本中修复。如果发生这种情况,我会编辑此答案,或者如果此修复程序阻止应用程序进入商店。
编辑:应用程序已成功提交到商店,因此虽然不是一个完美的解决方案,但它可以完成这项工作。