导航

WinRT应用触摸崩溃的问题后续(附解决方案)

Posted on 2013-01-22 15:26  Bullatus  阅读(395)  评论(0)    收藏  举报

问题描述

http://www.cnblogs.com/bullatus/archive/2013/01/21/2869233.html

应该可以确定是WInRT的问题了,ScrollViewer与Projection在一起导致的。

在我的问题情景下,可以这样解决。

为动画添加结束事件

            FloatingFlipOver.Completed -= FloatingFlipOver_Completed;
            FloatingFlipOver.Completed += FloatingFlipOver_Completed;

 在FloatingFlipOver_Completed内执行

            foreach (var sv in FloatingRoot.GetDescendantsOfType<ScrollViewer>())
            {
                sv.ZoomMode = (ZoomMode)(((int)sv.ZoomMode + 1) % 2);
                sv.ZoomMode = (ZoomMode)(((int)sv.ZoomMode + 1) % 2);
            }

 使用的附加方法的定义

    public static class VisualTreeHelperExtensions
    {
        public static IEnumerable<T> GetDescendantsOfType<T>(this DependencyObject start) where T : DependencyObject
        {
            return start.GetDescendants().OfType<T>();
        }

        public static IEnumerable<DependencyObject> GetDescendants(this DependencyObject start)
        {
            var queue = new Queue<DependencyObject>();
            var count = VisualTreeHelper.GetChildrenCount(start);

            for (int i = 0; i < count; i++)
            {
                var child = VisualTreeHelper.GetChild(start, i);
                yield return child;
                queue.Enqueue(child);
            }

            while (queue.Count > 0)
            {
                var parent = queue.Dequeue();
                var count2 = VisualTreeHelper.GetChildrenCount(parent);

                for (int i = 0; i < count2; i++)
                {
                    var child = VisualTreeHelper.GetChild(parent, i);
                    yield return child;
                    queue.Enqueue(child);
                }
            }
        }
    }