12

Wpf 命中测试非常好,但我发现扩展命中区域的唯一方法是在对象周围放置一个透明填充区域。我找不到任何在 Path 对象周围添加透明区域的方法。路径非常细,如果用户在路径附近单击,我想启用命中测试。我找不到任何方法来扩展具有透明区域的路径对象,如下图所示: alt text http://img175.imageshack.us/img175/6741/linepadding.png

我尝试使用部分透明的笔刷,但遇到了此处描述的问题:如何在 WPF 中绘制“软”线(可能使用 LinearGradientBrush)?

我还尝试在我的线条上放置一个装饰器,但由于 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 包裹在一个透明的Border.

于 2012-04-02T06:32:16.150 回答
2

In WPF you can create another path with its geometry databound to the first (using Element Binding), but with transparent brush and increased thickness.

Something more or less like this:

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

Note that the main path comes after in XAML, so that it is rendered on top.

于 2014-01-07T13:13:41.593 回答