12

Wpf ヒット テストは非常に優れていますが、ヒット ゾーンを拡張するために私が見つけた唯一の方法は、オブジェクトの周りに透明なパディング エリアを配置することです。Path オブジェクトの周囲に透明な領域を追加する方法が見つかりません。パスは非常に細いため、ユーザーがパスの近くをクリックした場合のヒット テストを有効にしたいと考えています。下の画像のような透明な領域でパス オブジェクトを拡張する方法が見つかりません。 代替テキスト http://img175.imageshack.us/img175/6741/linepadding.png

部分的に透明なストローク ブラシを使用しようとしましたが、ここで説明されている問題に遭遇しました

また、線の上に装飾を配置しようとしましたが、WPF アンチエイリアシング アルゴリズムが原因で、キャンバスをズームインして他のオブジェクトのヒット テストに悪い方法で干渉すると、位置がずれてしまいます。

ヒット テスト ゾーンを拡張するための提案があれば、高く評価されます。

ありがとう、クマール

4

3 に答える 3

7

Path.Dataはジオメトリオブジェクトです。Geometryクラスには、許容範囲内でテストを実行するのに役立ついくつかのメソッドがあります。

GetFlattenedPathGeometry(Double, ToleranceType)
GetOutlinedPathGeometry(Double, ToleranceType)
GetRenderBounds(Pen, Double, ToleranceType)

GetRenderBoundsが最適だと思います。

ジオメトリ(および少し幅)ができたら、次のように呼び出すことができます

geometry.FillContains(Point, Double, ToleranceType)

また

geometry.StrokeContains(Pen, Point, Double, ToleranceType)

そのすべての中から、ヒットテストから目的のヒットを調整する必要があります。

于 2011-09-01T05:09:59.050 に答える
3

Path を transparent 内にラップできますBorder

于 2012-04-02T06:32:16.150 に答える
2

WPF では、ジオメトリ データが最初のパスにバインドされた別のパスを作成できますが (Element Binding を使用)、透明なブラシと太さが増しています。

多かれ少なかれこのようなもの:

<Path x:Name="backPath" Data="{Binding Data, ElementName=mainPath}" StrokeThickness="10" Stroke="Transparent"/>
<Path x:Name="mainPath" Data="{Binding DataFromViewModel}" StrokeThickness="1" Stroke="Red"/>

XAML ではメイン パスが後に来るので、一番上にレンダリングされることに注意してください。

于 2014-01-07T13:13:41.593 に答える