Windows Phone 8 - 在Listpicker上滑动时应用程序崩溃

时间:2014-01-16 16:00:19

标签: windows-phone-8 gesture

我正在构建一个WP8应用程序。在我的应用程序的初始页面(登录后),我使用GestureService来操作屏幕并创建滑出菜单的效果。这一切都很好,但问题是每当对应用程序的任何其他页面上的ListPicker控件执行滑动操作时都会激活GestureService,并抛出未处理的Object引用未设置异常,如下所示:

enter image description here

我已经做了一些挖掘,这似乎是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来避免错误。那里还有一个未处理的例外,我只是忽略它。这种行为是否可能导致我的应用从商店被拒绝?

感谢任何帮助。

1 个答案:

答案 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。自上次发布以来已经有一段时间了,所以希望它能在下一个版本中修复。如果发生这种情况,我会编辑此答案,或者如果此修复程序阻止应用程序进入商店。

编辑:应用程序已成功提交到商店,因此虽然不是一个完美的解决方案,但它可以完成这项工作。