用于在列表框中交叉项目的工具提示

时间:2012-01-16 02:32:59

标签: c# wpf listbox wpf-controls tooltip

与此处的博文相似,http://blogs.msdn.com/b/kaelr/archive/2010/08/11/zoomableapplication2-a-million-items.aspx

我的zoomable-canvas中有很多曲线。曲线相交并密集放置。我已经为形状添加了工具提示。

假设我有3条交叉曲线A,B,C(几何形状不一样),它们位于边界框内。现在,工具提示仅显示在最重要的形状上。

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

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

1 个答案:

答案 0 :(得分:0)

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

基本上当你的鼠标移动时,你必须在你感兴趣的所有UIElements上做一个HitTest。然后当它们被击中时你必须显示你的自定义ToolTip控件。

这是让你说的话:

代码背后

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;
}