如何在WPF中增加矩形的命中测试半径?

时间:2013-10-07 23:03:43

标签: c# wpf visual-tree

假设我有一个这样的矩形:

<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宽,因此难以点击矩形的边缘。我想让Rectangle的笔划的“有效点击边框大小”大于该笔划的视觉外观。 (例如,假设矩形绘制为1px宽,但鼠标点击区域实际上是3px宽)

这样的事情是否可能,还是我被迫增加了Rectangle笔画的粗细?

2 个答案:

答案 0 :(得分:2)

Hacky 解决方案:

将“透明”矩形放在同一个地方,然后制作矩形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}}"/>

答案 1 :(得分: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}}" />