Canvas 上折叠的 TreeViewItem 的实际位置
Actual position of collapsed TreeViewItem on Canvas
如果 TreeViewItem 的父 TreeViewItem 折叠(意思是 <ParentTreeViewItem>.IsExpanded = false;
),有没有办法评估 Canvas 上 TreeViewItem 的实际位置?调试时,父项的 ItemsHost 中折叠项的可见性和位置信息似乎都没有更新。
感谢任何提示!
干杯,亚历克斯
找到解决此问题的方法:
基本上,每当 TreeViewItem 触发 OnCollapsed
或 OnExpanded
事件时,我都会强制所有其他 TreeViewItem 根据其祖先的 IsExpanded
属性 确定自己的位置到树根。
如果任何祖先折叠(即 IsExpanded == false
),我将其位置应用到当前的 TreeViewItems 位置。
如果 none 的祖先被折叠,我应用它自己的位置(而位置是 TreeViewItem 的自定义点 属性)。
代码示例:
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;
}
如果 TreeViewItem 的父 TreeViewItem 折叠(意思是 <ParentTreeViewItem>.IsExpanded = false;
),有没有办法评估 Canvas 上 TreeViewItem 的实际位置?调试时,父项的 ItemsHost 中折叠项的可见性和位置信息似乎都没有更新。
感谢任何提示!
干杯,亚历克斯
找到解决此问题的方法:
基本上,每当 TreeViewItem 触发 OnCollapsed
或 OnExpanded
事件时,我都会强制所有其他 TreeViewItem 根据其祖先的 IsExpanded
属性 确定自己的位置到树根。
如果任何祖先折叠(即 IsExpanded == false
),我将其位置应用到当前的 TreeViewItems 位置。
如果 none 的祖先被折叠,我应用它自己的位置(而位置是 TreeViewItem 的自定义点 属性)。
代码示例:
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;
}