2017-08-14 17 views
2

私はキャンバス上に1pxの幅の細い線がありますが、線の周りの領域(例えば5ピクセル幅)をテスト可能にしたいです。WPF - Polyline/Path周辺の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を追加したくありません(ライン内のすべての領域をヒット可能にします)。直線となりhittableラインの内側(一部)の領域では動作しませんFillプロパティを設定
...

答えて

1

ない最高のが、作業溶液。大きな値のStrokeThickness値とTransparentStrokeの値を持つポリラインのコピーを作成します。元Polylineで元Triggerは削除されるべきではないと新しい不可視の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> 

ノートのIsMouseOverプロパティの変更をキャッチするDataTriggerを追加します。

+0

私が思いつく解決策より優れています! :)おそらくそれほどパフォーマンスはあまり良くありませんが、幸運なことに私のデータセットは十分に小さく、問題ではありません。 – ManIkWeet