WPF自动浏览

版权声明:本文为博主原创文章,未经博主允许不得转载,如果你觉得有用的话,你可以收藏一下,或者评论一下,也可以关注下我,嘿嘿,你要是不听话,我的大刀可不是好玩的哈,想想心里都害怕,哼。快给我点个赞吧 https://blog.csdn.net/weixin_44446298/article/details/86230842

因为图片轮巡功能中需要实现一个图片自动浏览,循环播放,就是类似与小说中自动阅读效果。如图:

图片自动浏览

第一步,在主页面加一个自动浏览的按钮,就是一个下拉框,实现自动浏览的开启和关闭。加个选择点击事件:

        /// <summary>
        /// 自动浏览
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AutoGlaceOver_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (picTour.AutoGlaceOver.SelectionBoxItem == null)
            {
                return;
            }
            if ("开启".Equals(picTour.AutoGlaceOver.SelectionBoxItem.ToString()))
            {

                picTour.PictureTourControl01.timeNotice.Start();
                picTour.PictureTourControl01.timerWoke();
            }
            else
            {
                picTour.PictureTourControl01.timeNotice.Stop();
            }
        }

第二步,在滚动条加个方法,来控制滚动条的滚动效果,记住,一定要另起一个线程,不然滚动就会有卡顿,停止等现象。

        //定时器
        public  Timer timeNotice = new Timer();
        //滚动条
        private  ScrollViewer scroll;
        /// <summary>
        /// 定时器设置
        /// </summary>
        public void timerWoke()
        {
            timeNotice.Elapsed += new ElapsedEventHandler(ScrollRolling);
            timeNotice.Interval = 500;
        }
        /// <summary>
        /// 滚动条
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public  void ScrollRolling(object sender, ElapsedEventArgs e)
        {
            double oldVerticalOffset=this.scroll.VerticalOffset;
            this.scroll.Dispatcher.Invoke(
                new Action(
                      delegate
                      {
                          if (this.scroll.VerticalOffset<= (oldVerticalOffset))
                          {
                              scroll.ScrollToVerticalOffset(this.scroll.VerticalOffset + 10);
                              bool isFoot = IsVerticalScrollBarAtButtom(scroll);
                              if (isFoot)
                              {
                                  scroll.ScrollToTop();
                              }
                          }
                          else
                          {
                              scroll.ScrollToVerticalOffset(this.scroll.VerticalOffset);
                              bool isFoot = IsVerticalScrollBarAtButtom(scroll);
                              if (isFoot)
                              {
                              //当滚动条到达底部过后,返回顶部
                                  scroll.ScrollToTop();
                              }
                          }
                      }
                    )
                );}

第三步,判断滚动条是否到达底部,从而实现循环滚动。

        /// <summary>
        /// 判断滚动条是否到达底部
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public bool IsVerticalScrollBarAtButtom(ScrollViewer s)
        {
            bool isAtButtom = false;
            double dVer = s.VerticalOffset;
            double dViewport = s.ViewportHeight;
            double dExtent = s.ExtentHeight;
            if (dVer != 0)
            {
                if (dVer + dViewport == dExtent)
                {
                    isAtButtom = true;
                }
                else
                {
                    isAtButtom = false;
                }
            }
            else
            {
                isAtButtom = false;
            }
            if (s.VerticalScrollBarVisibility == ScrollBarVisibility.Disabled
                || s.VerticalScrollBarVisibility == ScrollBarVisibility.Hidden)
            {
                isAtButtom = true;
            }
            return isAtButtom;
        }

最后一步,关注我。

猜你喜欢

转载自blog.csdn.net/weixin_44446298/article/details/86230842
WPF