none
FlipView 缩放图片 RRS feed

  • 问题

  • 如何实现——缩放某张图片(假设索引为1),在缩放状态下翻到下一张图片(假设索引为2),再翻回来,索引为1的图片回到原始尺寸?

    别紧张,我不是什么好人。。。

    2013年3月29日 8:45

答案

  • 你的想法是对的,做法是错的。具体如下

            int lastID = 0;
            private void fv_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                try
                {
                    if (lastID != fv.SelectedIndex)
                    {
                        var dpobj = fv.ItemContainerGenerator.ContainerFromIndex(lastID); // 找到上一个子项的容器
    
                        ScrollViewer sv = FindVisualChild<ScrollViewer>(dpobj); // 从容其中找到该子项的ScrollViewer
    
                        if (sv != null)
                        {
    
                            sv.ZoomToFactor(1.0f); // 重置ScrollViewer
                        }
                        else
                        {
                            Debug.WriteLine("null");
                        }
    
                        lastID = fv.SelectedIndex;
                    }
                    
                }
                catch (Exception ex)
                {
    
                }
            }
    
            public static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
            {
                T t = default(T);
    
                int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < childrenCount; i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(parent, i);
                    t = (child as T);
                    if (t == null)
                    {
                        t = FindVisualChild<T>(child);
                    }
                    if (t != null)
                    {
                        break;
                    }
                }
    
                return t;
            }


    别紧张,我不是什么好人。。。

    2013年4月8日 1:47

全部回复

  • 每次更改当前项,重置图片容器大小怎么样?
    2013年3月29日 9:12
  • Hi,

    你具体的缩放是怎么实现的呢?


    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年4月2日 8:36
    版主
  • 就是FlipView+ScrollView啊

    别紧张,我不是什么好人。。。

    2013年4月7日 1:52
  • 我觉得 在selectionchanged事件中 设置其 scrollviewer sd.ZoomToFactor((float)1.0);

    或者在 每一个FlipViewItem的loaded时间中设置 sd.ZoomToFactor((float)1.0);

    这样弄如何?


    人生就要精彩

    2013年4月7日 2:01
  • 你的想法是对的,做法是错的。具体如下

            int lastID = 0;
            private void fv_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                try
                {
                    if (lastID != fv.SelectedIndex)
                    {
                        var dpobj = fv.ItemContainerGenerator.ContainerFromIndex(lastID); // 找到上一个子项的容器
    
                        ScrollViewer sv = FindVisualChild<ScrollViewer>(dpobj); // 从容其中找到该子项的ScrollViewer
    
                        if (sv != null)
                        {
    
                            sv.ZoomToFactor(1.0f); // 重置ScrollViewer
                        }
                        else
                        {
                            Debug.WriteLine("null");
                        }
    
                        lastID = fv.SelectedIndex;
                    }
                    
                }
                catch (Exception ex)
                {
    
                }
            }
    
            public static T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
            {
                T t = default(T);
    
                int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
                for (int i = 0; i < childrenCount; i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(parent, i);
                    t = (child as T);
                    if (t == null)
                    {
                        t = FindVisualChild<T>(child);
                    }
                    if (t != null)
                    {
                        break;
                    }
                }
    
                return t;
            }


    别紧张,我不是什么好人。。。

    2013年4月8日 1:47