栏目标题栏与listbox内容栏左右滑动时保持同步

栏目标题为listbox lb3,标题下内容为listbox lb2

        #region 栏目标题栏与listboxitems左右滑动时保持同步
        private void sv_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ScrollViewer sv1 = Utility.FindVisualElement<ScrollViewer>(lb2);
            ScrollViewer sv2 = Utility.FindVisualElement<ScrollViewer>(lb3);
            sv2.ScrollToHorizontalOffset(sv1.HorizontalOffset);
        }
        private void sv_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            ScrollViewer sv1 = Utility.FindVisualElement<ScrollViewer>(lb2);
            ScrollViewer sv2 = Utility.FindVisualElement<ScrollViewer>(lb3);
            sv2.ScrollToHorizontalOffset(sv1.HorizontalOffset);
        }
        private void sv_LayoutUpdated(object sender, EventArgs e)
        {
            ScrollViewer sv1 = Utility.FindVisualElement<ScrollViewer>(lb2);
            ScrollViewer sv2 = Utility.FindVisualElement<ScrollViewer>(lb3);
            sv2.ScrollToHorizontalOffset(sv1.HorizontalOffset);
        }
        #endregion

                    //给lb2赋值方法中声明同步事件:
                    Dispatcher.BeginInvoke(() =>
                    {
                        try
                        {
                            lb2.ItemsSource = quotes;
                            ScrollViewer sv = FindVisualElement<ScrollViewer>(lb2);
                            sv.MouseLeftButtonDown += sv_MouseLeftButtonDown;
                            sv.MouseLeftButtonUp += sv_MouseLeftButtonUp;
                            sv.LayoutUpdated += sv_LayoutUpdated;

                        }
                        catch (Exception ee)
                        {
                            string e = ee.ToString();
                        }

                    });

        /// <summary>
        /// 查找子节点
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="container"></param>
        /// <returns></returns>
        public static T FindVisualElement<T>(DependencyObject container) where T : DependencyObject
        {
            Queue<DependencyObject> childQueue = new Queue<DependencyObject>();
            childQueue.Enqueue(container);

            while (childQueue.Count > 0)
            {
                DependencyObject current = childQueue.Dequeue();
                T result = current as T;

                if (result != null && result != container)
                    return result;

                int childCount = VisualTreeHelper.GetChildrenCount(current);
                for (int childIndex = 0; childIndex < childCount; childIndex++)
                {
                    childQueue.Enqueue(VisualTreeHelper.GetChild(current, childIndex));
                }
            }
            return null;
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值