滑动时不触发ListBoxItem

  在做一个滑动的东西,里面有一些ListBoxItem,每个Item会触发一些事件。每次我滑动的时候如果从没有Item的地方滑到有Item的地方,或者从Item里面往外滑动时,都会触发到Item里面的事件。本来Item是用SelectionChanged的这个事件的。但对于我这种菜鸟来说表示消化不了。所以我把这些事件放到了PreviewMouseUp中,然后先在PreviewMouseDown中抓住鼠标的坐标,然后再在Up中计算出其中的坐标的差,然后在一定的范围内就代表这这个东西没有滑动而是正常的点击,而如果移动了一定的距离则表明我是在滑动,然后就可以不触发其中的事件。

  下面我做了一个小的DEMO,当我鼠标移动的时候右边的TextBox是不会显示出Item中的项的,然后只有当我点击的时候才会触发此项,然后把Item中的String放入TextBox中。

主要代码如下:

View Code
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }

        private void listBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
            Point p = e.GetPosition(listBox);
            x = p.X;
            y = p.Y;
        }

        private void listBox_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
            Point p = e.GetPosition(listBox);
            var offsetX = Math.Abs(p.X - x);
            var offsetY = Math.Abs(p.Y - y);
            if (offsetX <= 10 && offsetY <= 10 && listBox.SelectedItem != null) {
                dosomething();
            }
        }

        void dosomething() {
            if (listBox.SelectedItem != null) {
                foreach (ListBoxItem list in listBox.SelectedItems) {
                    if (list != null) {
                        string str = list.Content.ToString();
                        tb.Text = str;
                    }
                }
            }
        }

        private double x;
        private double y;
    }

 

转载于:https://www.cnblogs.com/socialdk/archive/2012/09/17/2689749.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值