2

Mode="Standard"ScrollViewer、Image(DataTemplateとしてScrollViewer内)を備えた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 アプリケーションでアイテムを変更 (スワイプ) またはページを読み込むと、1,000 回に 1 回、ブレークポイントがオンの状態でクラッシュしsv.ChangeView(..)AccessViolationException例外がスローされます。そのような行動の理由が何であるかを誰かが知っていますか? ChangeViewメソッドの呼び出しに制限はありますか?

編集:言及するのを忘れましDoubleTappedた-ScrollViewerにもイベントハンドラーがあり、これも呼び出しますChangeView

4

2 に答える 2

2

を使用して同じ AccessViolationException が発生し.ChangeView(..)ました。操作したい ScrollViewer にフォーカスがあると、例外がスローされることに気付きました。たとえば、ユーザーがリストをドラッグしたり、マウスでスクロールバーを制御したりした場合です。

アニメーションを無効にすると問題が解決しました。アニメーションを保持したい場合は、ビューを変更する前にコントロールのフォーカスを外す方法を探す必要があります。アニメーション化された ChangeView は、ユーザー入力のためにロックされているプロパティを変更しようとしていると思います。

お役に立てれば。

于 2013-11-14T13:54:56.293 に答える