点击LixtBox的子元素,滚动条自动滚动

上一篇ListBox样式中,我们在模板中已经定义了ScroViewer,所以思路就是对它进行操作。利用

ScrollToVerticalOffset(scrollViewer.HorizonOffert+100)

进行移动水平的滚动条。也可以移动垂直的滚动条。 

        private int LastIndex = 0;//上一次的列表选中的索引
        public void SelectedIndexChanged(object sender, SelectionChangedEventArgs e)
        {
            double perWidth = 120;//ListItem的宽度
            var children = VisualTreeHelper.GetChild(mainWindow.imagListBox, 0);//Border
            ScrollViewer sv = VisualTreeHelper.GetChild(children, 0) as  ScrollViewer;//ScrollViewer
            this.mainWindow.imagListBox.UpdateLayout();
            int tempInterver = 0;
            tempInterver = Math.Abs(CurrentIndex - LastIndex);//索引之间的间隔
            if (LastIndex > CurrentIndex)
            {
                sv.ScrollToHorizontalOffset(sv.HorizontalOffset - perWidth * tempInterver);
            }
            else
            {
                if ((CurrentIndex - 3) > 0)
                {
                    sv.ScrollToHorizontalOffset(sv.HorizontalOffset + perWidth * tempInterver);
                }
            }
            LastIndex = CurrentIndex;//当前索引
        }

我们还可以设置鼠标滚轮事件,让LixtBox水平滚动

public void PreviewMouseWheel(object sender, MouseWheelEventArgs e)
        {
            ScrollViewer scrollViewer = null;
            ItemsControl depObj = (ItemsControl)sender;
            scrollViewer = FindVisualChild<ScrollViewer>(depObj);

            if (scrollViewer != null)
            {
                if (e.Delta > 0)
                {
                    scrollViewer.LineRight();
                }
                else
                {
                    scrollViewer.LineLeft();
                }
            }

            e.Handled = true;
        }

        public static T FindVisualChild<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }

                    T childItem = FindVisualChild<T>(child);
                    if (childItem != null) return childItem;
                }
            }
            return null;
        }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值