假设我有一个这样的矩形:
<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笔画的粗细?
答案 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}}" />