2013-10-07 1 views
1

의 내가 같은 사각형 있다고 가정 해 봅시다 :이 MouseUp 이벤트에 대한 사각형 자체 충돌 테스트를하고 작동WPF에서 사각형의 적중 테스트 반경을 늘리려면 어떻게해야합니까?

<Rectangle Grid.Column="1" 
      Stroke="Red" 
      StrokeDashArray="4.0 4.0" 
      StrokeThickness="{Binding Path=CurrentThickness}" 
      Visibility="{Binding Path=VisibleRectangle, 
           Converter={StaticResource VisibilityConverter}}" 
      MouseUp="HandleMouseUp" /> 

합니다. 그러나 일반적으로 사각형의 너비는 1px이므로 사각형의 가장자리를 클릭하기가 어렵습니다. Rectangle의 획이 해당 획의 시각적 모양보다 크게되도록 "효과적인 클릭 테두리 크기"를 만들고 싶습니다. 예를 들어 사각형이 1 픽셀 너비로 그려 지지만 마우스 클릭 영역이 실제로 3 픽셀 너비라고 가정 해 보겠습니다.

그런 일이 가능한가, 아니면 사각형 스트로크의 두께를 늘려야합니까?

답변

2

해키 솔루션 :

이 내가 HighCore의 대답에 구축하여 결국 무엇을 같은 장소에서 "투명"사각형을 넣어 IsHitTestVisible="False"

<Rectangle x:Name="Clickable" 
      Grid.Column="1" 
      MouseUp="HandleMouseUp" 
      Fill="#01FFFFFF"/> 

<Rectangle Grid.Column="1" 
      Stroke="Red" 
      StrokeDashArray="4.0 4.0" 
      StrokeThickness="{Binding Path=CurrentThickness}" 
      IsHitTestVisible="False" 
      Visibility="{Binding Path=VisibleRectangle, 
           Converter={StaticResource VisibilityConverter}}"/> 
+0

소리가 잘 들립니다. – Tico

+0

+1. 클릭 가능한 사각형이 위에 그려지는 한 실제로 디스플레이 사각형 히트 테스트를 보이지 않게 만들 필요는 없습니다. (예 : XAML에서 직사각형을 바꾸거나 직사각형을 뒤집는 것만으로도 충분 함) –

+0

솔직히 말해서, 나는 이것이 해킹 된 해결책이라고 생각하지 않습니다. 히트 테스트 가시 영역이 사각형이므로 사각형에 사각형을 사용하는 것이 좋습니다. 확인 표시가 있습니다. (나는'# 01FFFFFF' 대신에 Transparent를 사용했다) –

0

당신의 사각형합니다. 표시된 사각형을 적중 테스트 사각형의 가운데로 이동하는 데 사용되는 여백을 확인하십시오.

<!-- This border is displayed when XXX. --> 
<!-- Note that the margin moves it into the middle of the hit testing 
    rectangle below. --> 
<Rectangle Stroke="Red" 
      StrokeDashArray="4.0 4.0" 
      Margin="1" 
      StrokeThickness="{Binding Path=CurrentThickness}" 
      Visibility="{Binding Path=VisibleRectangle, 
           Converter={StaticResource VisibilityConverter}}" /> 

<!-- This border handles hit testing when XXX. --> 
<Rectangle Panel.ZIndex="10" 
      StrokeThickness="3" 
      Stroke="Transparent" 
      MouseUp="HandleMouseUp" 
      Visibility="{Binding Path=VisibleRectangle, 
           Converter={StaticResource VisibilityConverter}}" /> 
관련 문제