列表框中相交项目的工具提示

本文关键字:项目 工具提示 列表 | 更新日期: 2023-09-27 18:20:18

类似于这里的博客文章,http://blogs.msdn.com/b/kaelr/archive/2010/08/11/zoomableapplication2-a-million-items.aspx

我的可缩放画布上有很多曲线。曲线相交且放置密集。我已经为形状添加了工具提示。

假设我有3条相交的曲线A、B、C(几何上不相同),它们在边界框内。现在,工具提示仅显示在所有形状之上的形状。

所有曲线都是可见的,但不知何故,每个曲线都有一个不可见的区域,鼠标悬停事件只针对顶部的形状触发,并为其显示工具提示。

如何为所有形状显示工具提示?

列表框中相交项目的工具提示

很抱歉,WPF没有内置此功能(据我所知)。您必须创建自己的ToolTipService。

基本上,当你的鼠标移动时,你必须对所有感兴趣的UI元素进行HitTest。然后,当它们被点击时,你将不得不显示你的自定义工具提示控件。

以下内容需要说明:

代码隐藏

private void WindowMouseMove(object sender, MouseEventArgs e)
{
    EllipseGeometry hitArea = new EllipseGeometry(e.GetPosition(this), 5, 5);
    VisualTreeHelper.HitTest(MainGrid, null, new HitTestResultCallback(ToolTipCallback), new GeometryHitTestParameters(hitArea));//MainGrid would be your ListBox
}
private HitTestResultBehavior ToolTipCallback(HitTestResult hitTestResult)
{
    GeometryHitTestResult geometryHitTestResult = ((GeometryHitTestResult)hitTestResult);
    if (geometryHitTestResult.VisualHit.GetType() == typeof(Rectangle))
    {
        Path potentialToolTip = (Path)geometryHitTestResult.VisualHit;
        if (potentialToolTip.Tag.ToString().Contains("CustomToolTip"))
        {
            //Show Custom ToolTip
            return HitTestResultBehavior.Stop;
        }
    }
    return HitTestResultBehavior.Stop;
}