2012-04-26 26 views
8

Tôi đã có trình kích hoạt IsMouseOver trên phần tử của mình. Tôi cũng đã có một hành động kéo xảy ra, nhờ đó một phần tử khác bắt chuột, và do đó kích hoạt IsMouseOver không bao giờ xảy ra, nhưng tôi muốn nó xảy ra trên các phần tử nhất định khi tôi kéo nó (chuột bị bắt và tất cả). Điều này có thể không?IsMouseOver khi chuột bị bắt

+0

Bạn có tìm thấy câu trả lời cho câu hỏi của mình không? –

Trả lời

0

Khi người dùng đang kéo thứ gì đó, chuột sẽ bị "giữ" trong thời điểm đó và các sự kiện chuột sẽ không được gửi tới các điều khiển mà chuột di chuyển qua. Chỉ có điều khiển thực sự "bắt chuột", nhận các sự kiện chuột. Vì vậy, bạn cần phải xử lý những sự kiện đó. Điều này phải dễ dàng. Nếu bạn gặp bất kỳ sự cố nào, hãy gửi email cho tôi kèm theo một số mã mẫu và tôi sẽ kiểm tra nó cho bạn. Hay nhất của mong muốn.

0

Tôi biết điều này đã được hỏi cách đây nhiều năm, nhưng chỉ trong trường hợp ai đó đến đây từ một công cụ tìm kiếm (giống như tôi), đây là cách tôi giải quyết vấn đề cho bản thân mình. Thay vì sử dụng IsMouseOver sở hữu, sử dụng lần truy cập thử nghiệm trong mã của bạn để xác định xem chuột là bên trong kiểm soát của bạn:

bool IsMouseOverEx = false; 

VisualTreeHelper.HitTest(this, d => 
{ 
    if (d == this) 
    { 
    IsMouseOverEx = true; 
    return HitTestFilterBehavior.Stop; 
    } 
    else 
    return HitTestFilterBehavior.Continue; 
}, 
ht => HitTestResultBehavior.Stop, 
new PointHitTestParameters(Mouse.GetPosition(this))); 

if (IsMouseOverEx) 
{ 
    //Do whatever you need in case of MouseOver 
} 

N.B. Nếu bạn chưa đọc câu hỏi, hãy lưu ý rằng phương pháp này là giải pháp cho các tình huống mà chuột bị "chiếm" và do đó, thuộc tính IsMouseOver không hoạt động chính xác. Trong các tình huống bình thường, bạn nên luôn sử dụng IsMouseOver.

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