2010-01-14 31 views
8

Tôi có một chương trình với hai lần xem trang WPF cho phép kéo và thả giữa hai. Vấn đề là, nó có thể gây khó chịu khi mở/đóng các mục trên treeview vì di chuyển chuột chỉ một pixel trong khi giữ nút chuột trái kích hoạt chức năng kéo/thả. Có cách nào để xác định khoảng cách di chuyển chuột trước khi nó được coi là kéo/thả không?WPF kéo khoảng cách ngưỡng

+0

Bạn có thể gửi một số mã? – ChrisF

Trả lời

1

Chỉ cần tạo một bộ đệm nhỏ vào mã của bạn để xác định thời điểm kéo bắt đầu.

  1. cờ chuột xuống
  2. trên di chuyển chuột - kiểm tra chuột xuống .. nếu có, hãy kiểm tra xem nếu chuyển nó xa hơn bất cứ điều gì đệm bạn chỉ định (3 pixel có lẽ là tốt)
  3. nếu nó có , bắt đầu kéo.
16

Có tham số hệ thống cho việc này. Nếu bạn có

Point down = {where mouse down event happened} 
Point current = {position in the MouseMove eventargs} 

thì chuột đã di chuyển khoảng cách kéo tối thiểu nếu

Math.Abs(current.X - down.X) >= SystemParameters.MinimumHorizontalDragDistance || 
Math.Abs(current.Y - down.Y) >= SystemParameters.MinimumVerticalDragDistance) 
0

Sau this bài viết cho Kéo và Thả thực hiện, bạn sẽ phải xử lý 2 sự kiện chuột để trì hoãn việc kéo cho đến khi con chuột di chuyển một khoảng cách nhất định. Đầu tiên, thêm một trình xử lý cho PreviewMouseDown lưu trữ vị trí chuột ban đầu tương ứng với điều khiển của bạn. Không sử dụng sự kiện MouseDown bởi vì nó là một sự kiện bubbling và có thể đã được xử lý bởi một kiểm soát trẻ em trước khi đạt được kiểm soát của bạn.

public class DraggableControl : UserControl 
{ 
    private Point? _initialMousePosition; 

    public DraggableControl() 
    { 
    PreviewMouseDown += OnPreviewMouseDown; 
    } 

    private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { 
    _initialMousePosition = e.GetPosition(this); 
    } 

Bên cạnh đó, xử lý MouseMove để kiểm tra khoảng cách di chuyển và cuối cùng bắt đầu hoạt động kéo:

Các vấn đề liên quan