更改命中区域

Change the hittest area

假设我将这个椭圆应用于样式的 ControlTemplate。 (例如:这将用于滑块的拇指)

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

现在,只要鼠标接触到这个椭圆,这个元素就会被鼠标捕获。如何更改碰撞几何?是否有 XAML-only 方法来做到这一点?

假设我想缩小碰撞区域,这样当鼠标位于椭圆中间时它就会捕捉到它。

或者我可能想让碰撞区域大于椭圆大小,这样当鼠标接近椭圆时它就会捕捉到它。

这些解决方案不会改变椭圆的命中测试,但会提供尽可能多的XAML解决方案。

可以通过将椭圆包裹在容器(网格?)中并为容器指定透明背景来使其变大。

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

可以通过在顶部添加较小的几何体来使其变小,再次使用透明背景并禁用椭圆上的命中测试 (IsHitTestVisible = "False"

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

重要:

  • 您需要将背景显式设置为透明。
  • 这两种解决方案都不会更改椭圆的命中测试,但会使用 'decoy',因此您必须实现处理诱饵上的点击等事件,并让它们作用于容器。