2017-01-20 15 views
0

이 타원을 스타일의 ControlTemplate에 적용했다고 가정 해보십시오. 지금 즉시 마우스가이 요소가 마우스로 캡처됩니다이 타원과 접촉으로히트 테스트 영역 변경

<Ellipse x:Name="Ellipse" 
     Fill="#C0FFFFFF" 
     Stroke="{StaticResource SpecialColor}" 
     StrokeThickness="2"/> 

를 (예를 들면 :이 슬라이더의 엄지 손가락에 사용됩니다). 충돌 형상을 어떻게 변경합니까? 이 작업을 수행 할 수있는 XAML 전용 방법이 있습니까?

마우스가 타원 중간에있을 때 충돌 영역을 작게 만들려고한다고 가정 해 봅시다.

또는 타원 크기보다 큰 충돌 영역을 만들기를 원할 것입니다. 마우스가 타원에 가까워지면이를 캡처합니다.

+1

가장 쉬운 방법 (XAML 전용)은 'Fill = "Transparent"가있는 약간 큰 (또는 더 작은) 타원을 그 위에 놓는 것입니다. 투명 (null과 반대)은 히트 테스트에 포함됩니다. –

+0

큰 타원을 더 크고 투명하게 배치하는 것은 좋은 생각입니다. 그러나 타원은 더 작아지는 것은 어떻습니까? 바깥 타원에 브러시로 채우면 히트 테스팅으로 계산됩니다. –

+1

Erno가 그의 답변에서 지적했듯이 투명 타원에서 마우스 이벤트를 처리해야합니다. 현재 타원을 장식 자라고 생각하고 투명 타원을 "실제"타원이라고 생각하십시오. –

답변

2

이 솔루션은 타원의 적중 테스트를 변경하지 않지만 가능한 한 XAML 솔루션을 제공합니다.

컨테이너에서 타원을 래핑하고 (Grid?) 컨테이너에 투명한 배경을 할당하면 더 큰 효과를 얻을 수 있습니다.

:

<Grid Background="Transparent"> 
    <Ellipse Margin="5" ... /> 
</Grid> 

은 작은 (타원에 IsHitTestVisible = "거짓"

<Grid> 
    <Ellipse IsHitTestVisible="False" ... /> 
    <Grid Background="Transparent" Width="5" Height="5" /> 
</Grid> 

중요을 히트 테스트를 투명한 배경 다시, 위에 작은 형상을 추가하고 사용하지 않도록 설정하여 수행 할 수 있도록 만들기

  • 당신은 투명 명시 적으로 배경을 설정해야합니다.
  • 이 두 솔루션은 타원 BU의 히트 테스트를 변경하지 마십시오 미끼를 사용하여 미끼에 클릭 등을 처리하는 이벤트를 구현하고 컨테이너에서 행동하게해야합니다.