首页 新闻 会员 周边

win8中flipView的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-05-06 12:09

我在flipView嵌入了一个mediaplayer

用于左右切换的时候,切换到上一个或下一个视频(不是好的实现方式,不过数据很少,凑合用吧)

为了让mediaplayer自动播放

我在flipView_SelectionChanged事件里查找当前显示的mediaplayer,并让它播放

        private void flipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            FlipView fv = sender as FlipView;
            if (fv.SelectedItem == null) return;
            if (e.AddedItems.Count > 0)
            {
                FlipViewItem initem = fv.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as FlipViewItem;
                if (initem != null)
                {
                    MediaPlayer mp1 = FindFirstElementInVisualTree<MediaPlayer>(initem);
                    mp1.Play();
                }
            }

        }


        private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
        {
            var count = VisualTreeHelper.GetChildrenCount(parentElement);
            if (count == 0)
                return null;

            for (int i = 0; i < count; i++)
            {
                var child = VisualTreeHelper.GetChild(parentElement, i);

                if (child != null && child is T)
                {
                    return (T)child;
                }
                else
                {
                    var result = FindFirstElementInVisualTree<T>(child);
                    if (result != null)
                        return result;

                }
            }
            return null;
        }

 

但目前遇到一个问题

当第一次flipView刚呈现的时候,获取的FlipViewItem initem结果是null

当手动切换后是正常的

 

有人知道是什么原因,如何解决么?

 

谢谢

sun8134的主页 sun8134 | 初学一级 | 园豆:98
提问于:2013-05-05 08:55
< >
分享
最佳答案
1

你的MediaPlayer是自定义控件?win8中没有这个控件,一般用MediaElement

收获园豆:10
lihaiyin | 菜鸟二级 |园豆:212 | 2013-05-06 09:44

我用MediaElement替换了MediaPlayer,并且找到了问题。第一次flipView_SelectionChanged事件是在fv的load事件之前发生,此时flipview中的一些逻辑可能还没有完成(例如:fv.selectedItem已经不为空,但是此时的SelectedItem中的IsSelected属性为flase)。而如果在load事件中再次获取SelectedItem中的IsSelected属性,则此时为true;获取initem也就不为null了。

 

看了下ContainerFromItem方法中的注视,如果item有容器并且已经在集合中,那么返回,否则返回null。应该是这个时候(loaded事件之前)容器并没有成功加入集合中

lihaiyin | 园豆:212 (菜鸟二级) | 2013-05-06 10:07

@lihaiyin: 

谢谢

看来还是win8下的加载顺序和以前不一样额...

记得wp都是先处理完load然后才触发SelectionChanged

 

谢谢您

 

MediaPlayer用的是这个 https://playerframework.codeplex.com/releases

用来播放smooth streaming的

sun8134 | 园豆:98 (初学一级) | 2013-05-06 12:11
其他回答(1)
0

解决了吗?我也碰到这个问题了。。。

kelleniiii | 园豆:202 (菜鸟二级) | 2014-03-26 20:50

木有

后来没有用flipView

感觉flipView快速切换的时候索引有时候不是很对

结果播放的音频不是当前呈现在界面上的...

支持(0) 反对(0) sun8134 | 园豆:98 (初学一级) | 2014-03-26 20:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册