trong WPF khi sử dụng VisualTreeHelper.HitTest
thậm chí cả các Phần tử bị ẩn được tìm thấy. Để bỏ qua yếu tố này và chỉ trả lại kết quả cho những người có thể nhìn thấy, tôi đã tạo ra một HitTestFilter
như sau:Hành vi WPF HitTest mặc định với các thành phần Ẩn/Thu gọn
///This Filter should cut all invisible or not HitTest Enabled Elements
private static HitTestFilterBehavior MyHitTestFilter(DependencyObject target)
{
var uiElement = target as UIElement;
if (uiElement != null){
if(!uiElement.IsHitTestVisible || !uiElement.IsVisible))
return HitTestFilterBehavior.ContinueSkipSelfAndChildren;
}
return HitTestFilterBehavior.Continue;
}
Lọc này làm công việc của mình, nhưng tôi muốn biết những gì mặc định WPF HitTesting làm trong trường hợp này? Liệu nó có sử dụng một bộ lọc tương tự? Có cách nào khác, có thể là lựa chọn tốt hơn cho việc này?
Để làm rõ một mô tả ngắn gọn:
Trong hình ảnh có
- Một Layout container như phần tử gốc
- Button1 mà có thể nhìn thấy
- Trên Button1 là Button2 vô hình
Nếu tôi có bố cục như vậy và thực hiện một mouseclick trong vùng màu xanh lá cây của Button2, WPF bỏ qua Button2 và sự kiện nhấp xuất hiện trên Button1.
Nếu tôi thực hiện thủ công HitTesting mà không có bộ lọc được mô tả trước đó, tôi sẽ nhận được Button2 là kết quả.
Vì vậy, câu hỏi là, hành vi/bộ lọc mặc định mà WPF đang sử dụng là gì?
Cảm ơn trước vì bất kỳ đề xuất nào.
Không thể tạo lại điều này cho phần tử Đã thu gọn. Và đó sẽ là kỳ lạ anyway vì họ sẽ không được đặt ra. – Clemens
oh bạn nói đúng. tôi sẽ chỉnh sửa câu hỏi của tôi, tôi nghĩ rằng tôi đã thử nghiệm nó với sụp đổ. lấy làm tiếc. – sebhaub
Có rất nhiều điều để giải thích về điều này. Tuy nhiên, bạn có thể nhận được một trình giải mã .Net (giống như JetBrains miễn phí dotPeek) và xem xét việc thực hiện ví dụ. phương thức UIElement.InputHitTest. – Clemens