를 지정할 수있는 VisualTreeHelper.HitTest()
오버로드 기능을 사용하여 HitTestParameters
:
var hitRect = new Rect(x - 2, y - 2, 4, 4);
VisualTreeHelper.HitTest(drawing, null, null,
new GeometryHitTestParameters(new RectangleGeometry(hitRect)));
주 우리가를 사용 : GeometryHitTestParameters
와 함께 전달 직사각형 pt
중심 구조 (그러나 더 이상의 점)을 사용 이 예에서 직사각형 형상이지만 더 좋은 근사값 (특히 터치 스크린의 경우)은 원 (EllipseGeometry
)입니다.
이제는 무엇을 호출해야하는지 알지만 오버로드는 반환 값이 아니라 대신 여러 히트를 누적 할 수있는 콜백 함수를 사용합니다 (더 복잡한 규칙에 따라 하나를 선택).
htr => {
MessageBox.Show("You clicked on the line!");
return HitTestResultBehavior.Stop;
},
당신이 자주 사용하는 경우가 더 쓸 수 있습니다 : 당신도 직접 코드를 실행할 수 있습니다
bool result = false;
var hitRect = new Rect(x - 2, y - 2, 4, 4);
VisualTreeHelper.HitTest(drawing, null,
htr => { result = true; return HitTestResultBehavior.Stop; },
new GeometryHitTestParameters(new RectangleGeometry(hitRect)));
참고 : 우리의 예에서 우리는 그래서 우리는 단지 첫 번째 히트에서 중지를 필요가 없습니다 그 일반적인 방법 (예를 들어, 사각형 크기의 선택적 매개 변수 사용).
히트 여부를 알고 싶지 않지만 어떤 객체인지 알고 싶다면 두 번째 콜백 함수 (HitTestResultCallback
), 해당 매개 변수 (htr
이전 예)는 HitTestResult
에서 파생 된 클래스이며 심지어 기본 클래스에 찾고있는 시각적 객체 인 VisualHit
(일반 : DependencyObject
)을 찾고 있습니다.
'HitTestParameters'를 지정할 수있는 곳에서'VisualTreeHelper.HitTest'를 사용하면'pt'를 중심으로하지만'GeometryHitTestParameters'에서 전달 된 한 점보다 큰 사각형 지오메트리를 사용하십시오 : VisualTreeHelper.HitTest (drawing, null, null, new GeometryHitTestParameters (...))'. –
@AdrianoRepetti 감사합니다. 방금 그 옵션을 탐색하고있었습니다. 기사 나 예제를 통해 나를 도울 수 있습니까? – Vahid
코멘트에 추가 된,'new RectangleGeometry (새로운 Rect (x-2, y-2, 4, 4))'로'...'를 대체하십시오. 글쎄 ... 그냥 예를 들면. Rectangle은 가장 단순한 것이지만, 특히 터치 스크린으로 애플리케이션을 사용할 계획이라면 원이 더 큰 히트 테스트 영역을 더 잘 나타낼 것입니다. –