2010-04-15 30 views
12

Kiểm tra hit Wpf là khá tốt nhưng phương pháp duy nhất tôi tìm thấy để mở rộng vùng nhấn là đặt một vùng đệm trong suốt quanh đối tượng của bạn. Tôi không thể tìm thấy bất kỳ phương pháp để thêm một khu vực trong suốt arround một đối tượng Path. Đường dẫn rất mỏng và tôi muốn bật thử nghiệm lần truy cập nếu người dùng nhấp vào gần đường dẫn. Tôi không thể tìm thấy bất kỳ phương pháp để mở rộng các đối tượng con đường với một khu vực trong suốt như hình dưới đây: alt text http://img175.imageshack.us/img175/6741/linepadding.pngLàm thế nào để mở rộng vùng thử nghiệm hit WPF cho đối tượng Đường dẫn

Tôi cố gắng để sử dụng một bàn chải đột quỵ một phần trong suốt nhưng tôi chạy vào các vấn đề được mô tả ở đây: How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

Tôi cũng đã cố gắng để đưa một adorner trên đường dây của tôi, nhưng vì các thuật toán chống răng cưa WPF, vị trí là cách tắt khi tôi phóng to trong vải của tôi và can thiệp với các đối tượng khác hit-thử nghiệm một cách xấu.

Bất kỳ đề xuất nào để mở rộng vùng thử nghiệm sẽ được đánh giá cao.

Cảm ơn, Kumar

Trả lời

7

Path.Data là một đối tượng hình học. Lớp Hình học có một số phương pháp có thể giúp bạn đạt thử nghiệm với dung sai:

GetFlattenedPathGeometry(Double, ToleranceType) 
GetOutlinedPathGeometry(Double, ToleranceType) 
GetRenderBounds(Pen, Double, ToleranceType) 

Tôi nghĩ GetRenderBounds sẽ hoạt động tốt nhất cho bạn.

Một khi bạn đã hình học (cộng với một chút chiều rộng) bạn có thể gọi

geometry.FillContains(Point, Double, ToleranceType) 

hoặc

geometry.StrokeContains(Pen, Point, Double, ToleranceType) 

Trong số tất cả điều đó, bạn nên điều chỉnh các hit mong muốn từ thử nghiệm hit của bạn;

+0

+1 đã giúp tôi về sự cố tương tự ... – SvenG

3

Bạn có thể quấn Đường dẫn bên trong một trong suốt Border.

2

Trong WPF, bạn có thể tạo đường dẫn khác với biểu đồ dữ liệu hình học của nó đến đầu tiên (sử dụng phần tử Binding), nhưng với bàn chải trong suốt và độ dày tăng lên.

Something nhiều hay ít như thế này:

<Path x:Name="backPath" Data="{Binding Data, ElementName=mainPath}" StrokeThickness="10" Stroke="Transparent"/> 
<Path x:Name="mainPath" Data="{Binding DataFromViewModel}" StrokeThickness="1" Stroke="Red"/> 

Lưu ý rằng đường dẫn chính đưa ra sau khi trong XAML, do đó nó được render trên đầu trang.

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