2013-10-07 33 views
1

比方说,我有一个矩形这样的:如何增加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" /> 

这适用于在矩形本身MouseUp事件做命中测试。但是,矩形的典型宽度为1px宽,难以点击矩形的边缘。我想让“矩形”笔画的“有效的单击边框大小”大于该笔画的视觉外观。 (例如,假设矩形绘制为1px宽,但鼠标点击区域实际上是3px宽)

这样的事情是可能的,还是我被迫增加Rectangle中风的厚度?

回答

2

哈克解决方案:

把“透明”矩形在同一个地方,让你的矩形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。只要可点击的矩形绘制在顶部,您实际上不需要使显示矩形命中测试不可见。 (例如Zorder或颠倒XAML中矩形的顺序就足够了) –

+0

老实说,我不认为这是一个拙劣的解决方案。我们想要测试可见区域是一个矩形,所以我们可以使用矩形来实现这一点。勾上勾号。 (我使用Transparent而不是'#01FFFFFF') –

0

这是我最后使用,建立在HighCore的答案。请注意用于将显示的矩形移动到命中测试矩形中间的边距:

<!-- 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}}" />