2010-04-15 8 views
12

Testowanie trafień WPF jest całkiem dobre, ale jedyną metodą, którą znalazłem, aby rozszerzyć strefę trafień, jest umieszczenie przezroczystego obszaru wypełnienia wokół twojego obiektu. Nie mogę znaleźć żadnej metody dodania przezroczystego obszaru wokół obiektu Path. Ścieżka jest bardzo cienka i chciałbym włączyć testowanie trafień, jeśli użytkownik kliknie w pobliżu ścieżki. Nie mogę znaleźć żadnego sposobu na przedłużenie ścieżki obiektu z przezroczystego obszaru jak na zdjęciu poniżej: alt text http://img175.imageshack.us/img175/6741/linepadding.pngJak rozszerzyć strefę testowania trafień WPF dla obiektu Path

próbowałem stosować częściowo przezroczysty pociągnięcia pędzlem, ale wpadłem na problem opisany tutaj: How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

Próbowałem również umieścić adornera na mojej linii, ale ze względu na algorytmy wygładzania WPF, pozycja jest wyłączona, gdy powiększam płótno i przeszkadzam innym testom trafności w zły sposób.

Wszelkie sugestie dotyczące rozszerzenia strefy testowania trafień będą bardzo mile widziane.

Dzięki Kumar

Odpowiedz

7

Path.Data jest obiektem geometria. Klasa Geometry ma kilka metod, które mogą pomóc hit testu z tolerancją:

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

myślę GetRenderBounds będą pracować dla Ciebie najlepszy.

Gdy masz geometrię (plus trochę szerokość) można wywołać

geometry.FillContains(Point, Double, ToleranceType) 

lub

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

Spośród wszystkich, które należy dostosować do pożądanego uderzony z testu uderzenia;

+0

+1 pomógł mi w podobnym zagadnieniu ... – SvenG

3

Możesz zawinąć ścieżkę wewnątrz przezroczystego Border.

2

W WPF można utworzyć inną ścieżkę z jej geometrią databound do pierwszej (przy użyciu wiązania elementów), ale z przezroczystą szczotką i zwiększoną grubością.

Coś mniej więcej tak:

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

pamiętać, że główne ścieżki przychodzi po w XAML, tak, że jest renderowane na wierzchu.

Powiązane problemy