如果折叠了TreeViewItem的父TreeViewItem(意味着<ParentTreeViewItem>.IsExpanded = false;
),是否有办法评估它在Canvas上的实际位置?调试时,父项的ItemsHost中折叠项的“可见性”或“位置”信息似乎都没有更新。
感谢任何提示!
干杯,亚历克斯
答案 0 :(得分:0)
找到了解决此问题的方法:
基本上,每当TreeViewItem触发OnCollapsed
或OnExpanded
事件时,我都会强制所有其他TreeViewItem根据其祖先的IsExpanded
属性确定自己的位置,直到树的根。
如果任何祖先折叠(例如IsExpanded == false
),我会将其位置应用于当前TreeViewItems位置。
如果没有一个祖先折叠,则应用其自己的位置(而位置是TreeViewItem的自定义Point属性)。
代码示例:
private Point DeterminePosition()
{
Point point = this.position;
if (ParentTreeViewItem != null)
{
MyTreeViewItem parent = null, lastCollapsed = null;
parent = ParentTreeViewItem;
while (parent != null)
{
if (parent.IsExpanded == false)
{
lastCollapsed = parent;
}
parent = parent.ParentTreeViewItem;
}
if (lastCollapsed != null)
{
point = new Point(position.X, lastCollapsed.Position.Y);
}
}
return point;
}