2017-08-14 64 views
2

我在画布上有一条很窄的1px宽线,我想要一条围绕线(例如5个像素宽)的区域进行可测试。WPF -HitTest半径折线/路径

<Polyline Points="10,10,50,50,90,10,130,50,170,10,210,50,250,10" StrokeThickness="1"> 
    <Polyline.Style> 
    <Style TargetType="Polyline"> 
     <Setter Property="Stroke" Value="Magenta"/> 
     <Setter Property="StrokeThickness" Value="1"/> 
     <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Stroke" Value="Blue" /> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 
    </Polyline.Style> 
</Polyline> 

上面的示例代码难以命中多段线。
我不想在折线周围添加Border(使线内的所有区域都可以打开)。
设置Fill属性不适用于直线,并且使线内部(某些)区域可以击中...

回答

1

不是最好但工作正常的解决方案。用较大的StrokeThickness值和TransparentStroke颜色创建您的多段线的副本。在原Polyline添加DataTrigger赶上新的不可见Polyline

<Canvas> 
    <Polyline x:Name="HitTestPolyline" Points="10,10,50,50,90,10,130,50,170,10,210,50,250,10" Stroke="Transparent" StrokeThickness="5"/> 
    <Polyline Points="10,10,50,50,90,10,130,50,170,10,210,50,250,10" StrokeThickness="1"> 
     <Polyline.Style> 
      <Style TargetType="Polyline"> 
       <Setter Property="Stroke" Value="Magenta"/> 
       <Setter Property="StrokeThickness" Value="1"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=HitTestPolyline, Path=IsMouseOver}" Value="True"> 
         <Setter Property="Stroke" Value="Blue" /> 
        </DataTrigger> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Stroke" Value="Blue" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </Polyline.Style> 
    </Polyline> 
</Canvas> 

注意,原来Trigger不应删除IsMouseOver属性更改。

+0

比我能想出的任何解决方案都要好! :)可能不是很友善的表现,但幸运的是我的数据集足够小,无所谓。 – ManIkWeet