2

我有Mode="Standard"带有 ScrollViewer、Image(在 ScrollViewer 中作为 DataTemplate)的 FlipView(它是用 虚拟化的)。我ImageOpened用这样的代码在 Image 上设置了事件处理程序:

private void Image_ImageOpened(object sender, RoutedEventArgs e)
{
    var image = sender as Image;

    double width = image.ActualWidth;
    double height = image.ActualHeight;
    var sv = image.Parent as ScrollViewer;

    if (sv != null && width != 0 && height != 0)
    {
        var properZoom = ZoomUtilities.CalculateZoomFactor(width, height);
        sv.MinZoomFactor = 0.3f;
        sv.ChangeView(null, null, properZoom);
        sv.MinZoomFactor = properZoom;                
    }
}

properZoom始终是正确的值。当我更改项目(滑动)或加载页面时,千分之一的使用此 FlipView 应用程序崩溃并打开断点sv.ChangeView(..)AccessViolationException引发异常。有谁知道这种行为可能是什么原因?ChangeView当我可以调用方法时有什么限制吗?

编辑:忘了提 - DoubleTappedScrollViewer 上还有事件处理程序,它也调用ChangeView

4

2 回答 2

2

我有相同的 AccessViolationException 使用.ChangeView(..)。我注意到当我想要操作的 ScrollViewer 具有焦点时引发了异常。例如,当用户在列表中拖动或用鼠标控制滚动条时。

禁用动画解决了我的问题。如果您想保留动画,您应该在更改视图之前寻找一种方法来消除对控件的关注。我猜动画 ChangeView 试图更改由于用户输入而被锁定的属性。

希望这可以帮助。

于 2013-11-14T13:54:56.293 回答
1

我有同样的问题。对我的解决方案:调用 inverse,从图像对象到父对象出错。调用正常路径:objectscroolviewer.changeview,没有错误。然后:

var sv = image.Parent as ScrollViewer;

改成

var sv = ScrollViewerObject; 

从外部获取对象到变量,而不是通过父级的内部引用,并忽略发件人参数。

于 2014-02-27T20:57:44.333 回答