滑动时不触发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/p/2689749.html