2010-04-15 3 views
12

Wpf 적중 테스트는 꽤 좋지만 적중 영역을 확장하는 유일한 방법은 개체 주위에 투명한 패딩 영역을 두는 것입니다. path 객체를 투명한 영역에 추가하는 방법을 찾을 수 없습니다. 경로가 매우 얇아서 사용자가 경로 근처를 클릭하면 적중 테스트를 사용하고 싶습니다. 나는 아래 이미지와 같은 투명 영역으로 경로 객체를 확장 할 수있는 방법을 찾을 수 없습니다 : 나는 부분적으로 투명한 스트로크 브러시를 사용하려고 alt text http://img175.imageshack.us/img175/6741/linepadding.png경로 개체에 대해 WPF 적중 테스트 영역을 확장하는 방법

을하지만 난 여기에 설명 된 문제로 실행 : How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

나는 또한 내 선상에 adorner를 넣으려고했지만 WPF 앤티 앨리어싱 알고리즘으로 인해 캔버스를 확대하고 다른 객체의 히트 테스트를 방해 할 때 위치가 벗어났습니다.

히트 테스트 영역을 확장하기위한 제안은 매우 감사하겠습니다.

덕분에, 쿠마

답변

7

Path.Data는 기하 개체입니다. Geometry 클래스에는 허용 오차를 테스트하는 데 도움이되는 몇 가지 방법이 있습니다.

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

GetRenderBounds가 가장 적합하다고 생각합니다. 당신이 지오메트리 (플러스 약간 폭) 일단

호출 할 수

geometry.FillContains(Point, Double, ToleranceType) 

또는 모든 중

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

당신이해야 조정할 히트 테스트에서 원하는 히트;

+0

+1로 비슷한 문제를 해결했습니다. – SvenG

3

경로를 투명하게 둘러 쌀 수 있습니다. Border.

2

WPF에서는 첫 번째 (요소 바인딩 사용)에 바인딩 된 형상 데이터로 다른 경로를 만들 수 있지만 투명한 브러시와 두께가 증가합니다.

이 같은 다소 뭔가 : 그것은 상단에 렌더링되도록 기본 경로는 XAML에서 후 오는

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

참고.