zoukankan      html  css  js  c++  java
  • 滑动时不触发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;
        }

  • 相关阅读:
    设计模式之设计原则
    浅谈简单工厂模式和策略模式
    Flask-SQLAlchemy插件
    SQLAlchemy的ORM
    Flask 微博三方登录
    SQLAlchemy介绍和基本使用
    Flask常用的钩子函数
    Flask-Restful详解
    flask信号使用
    多线程爬取斗图图片
  • 原文地址:https://www.cnblogs.com/socialdk/p/2689749.html
Copyright © 2011-2022 走看看