Wpf命中测试相当不错,但我发现扩展命中区域的唯一方法是在对象周围放置一个透明的填充区域。我找不到任何方法来添加一个Path对象的透明区域。路径非常薄,如果用户在路径附近点击,我想启用命中测试。我找不到任何方法来扩展路径对象的透明区域,如下图所示: alt text http://img175.imageshack.us/img175/6741/linepadding.png
我尝试使用部分透明的笔画,但我遇到了这里描述的问题:How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?
我还尝试在我的线上放置一个装饰器,但是由于WPF抗锯齿算法,当我放大画布并干扰其他对象以严重的方式进行测试时,位置就会偏离。
任何延长热门测试区域的建议都将受到高度赞赏。
谢谢, 库马尔
答案 0 :(得分: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)
在所有这些中,你应该从命中测试中调整所需的命中量;
答案 1 :(得分:3)
您可以将Path包装在透明的Border
。
答案 2 :(得分: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之后,因此它呈现在顶部。