如何使用 VirtualTreeView 组件检查节点是否可见(在屏幕上)?像这样的东西:
if not Grid.NodeVisible (Node) then
Grid.ScrollIntoView (Node, True);
如果节点不可见,则应居中,但如果可见,则保持原位。
请注意,我不是在谈论节点的可见标志,而是在屏幕上的可见性。在我的情况下,该IsVisible
物业总是返回。True
如何使用 VirtualTreeView 组件检查节点是否可见(在屏幕上)?像这样的东西:
if not Grid.NodeVisible (Node) then
Grid.ScrollIntoView (Node, True);
如果节点不可见,则应居中,但如果可见,则保持原位。
请注意,我不是在谈论节点的可见标志,而是在屏幕上的可见性。在我的情况下,该IsVisible
物业总是返回。True
我认为最接近的是GetDisplayRect()
方法:
根据滚动、展开状态等确定给定节点覆盖的客户端坐标。如果找不到给定节点(因为其父节点之一已折叠或不可见),则返回一个空矩形。
不确定在节点“可见但不在视野”的情况下它会返回什么 - 您可能必须编写辅助函数来检查 VT 客户端矩形内返回的矩形...
IsVisible 属性仅在节点已被隐藏或未如您所见时才返回。查找节点是否在屏幕上的唯一方法是按照建议使用 GetDisplayRect,然后针对树视图的客户端矩形对其进行测试。
但是,如果我了解您要正确执行的操作,则 VirtualTreeView 的 SelectionOption 中的 toCenterScrollIntoView 选项将为您提供所需的行为,而无需测试节点是否在可见区域中。
即(C++):
TreeView->TreeOptions->SelectionOptions =
TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ;
...
ScrollIntoView(Node);