2010-04-15 59 views
12

Wpf命中测试很不错,但我发现扩展命中区域的唯一方法是在对象周围放置透明填充区域。我找不到任何方法在Path对象周围添加透明区域。路径非常薄,如果用户点击路径附近,我想启用命中测试。我无法找到任何方法来的路径对象中包含的图像的透明区域延伸: alt text http://img175.imageshack.us/img175/6741/linepadding.png如何扩展Path对象的WPF命中测试区域

我试图使用部分透明的行程刷但我跑进这里描述的问题:How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

我也尝试将一个装饰器放在我的行上,但由于WPF消除锯齿算法,当我放大画布并干扰其他物体碰撞测试时,位置很不利。

任何建议延长命中测试区将不胜感激。

谢谢, 库马尔

回答

7

Path.Data是几何对象。几何类有几个方法可以帮助你打的测试与宽容:

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

我认为GetRenderBounds将工作最适合你。

一旦你的几何形状(再加上一点点的宽度),你可以调用

geometry.FillContains(Point, Double, ToleranceType) 

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

走出了这一切,你应该调整从你的命中测试所需的命中;

+0

+1帮助我解决了类似问题... – SvenG 2012-03-28 16:53:09

3

您可以将Path包裹在透明的Border中。

2

在WPF中,您可以创建其几何数据绑定的第一个路径(使用元素绑定),但使用透明画笔和增加的厚度。

东西或多或少这样的:

<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。