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

C# 列表框中相交项目的工具提示,c#,wpf,listbox,wpf-controls,tooltip,C#,Wpf,Listbox,Wpf Controls,Tooltip,与这里的博文类似 我的可缩放画布上有很多曲线。曲线相交并密集放置。我已经向形状添加了工具提示 假设我有3条相交的曲线A,B,C,在几何上不一样,它们在一个边界框内。现在,工具提示仅显示在所有形状之上的形状 所有曲线都是可见的,但不知何故,有一个不可见的区域限制了每条曲线,并且仅为顶部的形状触发鼠标悬停事件,并为其显示工具提示 如何为所有形状显示工具提示?很抱歉,据我所知,WPF没有内置工具提示。您必须创建自己的ToolTipService 基本上,当鼠标移动时,您必须对所有感兴趣的UIEleme

与这里的博文类似

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

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

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


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

很抱歉,据我所知,WPF没有内置工具提示。您必须创建自己的ToolTipService

基本上,当鼠标移动时,您必须对所有感兴趣的UIElement进行命中测试。然后,当他们成功时,您必须显示自定义工具提示控件

以下是一些让你明白的事情:

代码隐藏
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;
}