与此处的博文相似,http://blogs.msdn.com/b/kaelr/archive/2010/08/11/zoomableapplication2-a-million-items.aspx
我的zoomable-canvas中有很多曲线。曲线相交并密集放置。我已经为形状添加了工具提示。
假设我有3条交叉曲线A,B,C(几何形状不一样),它们位于边界框内。现在,工具提示仅显示在最重要的形状上。
所有曲线都是可见的,但不知何故,有一个不可见的区域限制每条曲线,只有顶部的形状才会触发鼠标悬停事件,并显示工具提示。
如何为所有形状显示工具提示?
答案 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;
}