Silverlight,鼠标单击路径中的间隙

Posted

技术标签:

【中文标题】Silverlight,鼠标单击路径中的间隙【英文标题】:Silverlight, mouse click on Path with gaps in 【发布时间】:2012-07-30 05:57:47 【问题描述】:

我正在开发一个 Silverlight 应用程序,该应用程序在 Canvas 上显示多个小图标,每个图标的大小约为 10x10 像素。图标由路径定义。

存在一个可用性问题,即某些图标的形状像这样,因此,如果用户在间隙中单击,则不会记录任何单击。请参阅下图以了解我的意思。

我想知道,WPF/Silverlight 中是否有一种简单的方法可以使路径的“背景”成为可点击的?而不是将它包装在另一个 WPF 类型中,这会增加渲染器的负担。

或者,是否有一个简单的修复来改进系统,比如将路径包裹在矩形或其他几何图形中以使整个区域可点击?

【问题讨论】:

既然您想避免将其嵌套在另一种类型中,也许可以尝试让路径也用透明颜色路径填充这些空白? 你知道怎么做吗?据我所知,Path 支持填充、描边但不支持多种颜色。还是您的意思是两条路径? 这需要在实际路径后面放置一个普通的矩形路径并处理相同的点击事件。这甚至可能比矩形更糟糕,但你需要时间测试。绝对更难维护。 【参考方案1】:

使用带有绘图组的绘图笔刷,而不是路径。

<Rectangle Name="TransparentBack"  Height="10" Width="10">
    <Rectangle.Fill>
        <DrawingBrush>
            <DrawingBrush.Drawing>
                <DrawingGroup>
                    <GeometryDrawing Brush="Transparent">
                        <GeometryDrawing.Geometry>
                            <RectangleGeometry>
                                <RectangleGeometry.Rect>
                                    <Rect Height="1" Width="1"/>
                                </RectangleGeometry.Rect>
                            </RectangleGeometry>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                    <GeometryDrawing Brush="White">
                        <GeometryDrawing.Geometry>
                            <PathGeometry>
                                <PathFigure StartPoint="0,0">
                                    <LineSegment Point="0,1"/>
                                    <LineSegment Point="1,1"/>
                                </PathFigure>
                            </PathGeometry>
                        </GeometryDrawing.Geometry>
                    </GeometryDrawing>
                </DrawingGroup>
            </DrawingBrush.Drawing>
        </DrawingBrush>
    </Rectangle.Fill>
</Rectangle>

【讨论】:

顺便说一句,实际上不需要透明几何。我喜欢直接控制渲染区域。

以上是关于Silverlight,鼠标单击路径中的间隙的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 将鼠标单击发送到任务栏中的按钮

加载 Silverlight 窗口后检测鼠标位置

如何在按钮按下事件之外在 Silverlight 中获取鼠标按钮状态?

Silverlight 全局鼠标按下事件处理程序

JQuery解决鼠标单双击冲突问题

JQuery如何实现双击事件时不触发单击事件,解决鼠标单双击冲突问题