2017-01-20 89 views
0

想象一下,我将这个椭圆应用于样式的ControlTemplate。现在只要鼠标进入接触与该椭圆此元件得到由鼠标捕获(例如:这将被用于滑动件的拇指)更改击中区域

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

。我怎样才能改变碰撞几何?是否有只有XAML的方法才能做到这一点?

假设我想让碰撞区域变小,所以当鼠标位于椭圆中间时,它会捕捉它。

或者我想让碰撞区域大于椭圆大小,所以当鼠标靠近椭圆时它会捕获它。

+1

最简单的方法(仅限于XAML)将在其上放置一个稍大(或更小)的带有Fill =“Transparent”的椭圆。透明(而不是空)不计入命中测试。 –

+0

好意见,使虚拟椭圆更大更透明。但椭圆比较小?如果我用一些笔刷填充外部椭圆,它将计入点击测试 –

+1

正如Erno在他的回答中指出的,您必须在透明椭圆上处理鼠标事件。把你当前的椭圆想象成装饰者,把透明的看作是“实际”的椭圆。 –

回答

2

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

通过将椭圆包装到一个容器(网格?)中并将透明背景分配给容器,可以使其变大。

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

使它更小,可以通过在椭圆具有透明背景加入在顶部的较小的几何形状,再和禁用命中测试(IsHitTestVisible =“假”

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

重要完成

  • 你需要将背景设置为透明明确。
  • 这两种解决方案不改变椭圆BU的命中测试不要使用“诱饵”,因此您必须实施处理诱饵上的点击等事件,并让它们对容器起作用。