1
在GTK#应用程序中,我在ScrolledWindow中使用了一个TreeView,并尝试在TreeStore中查找项目的位置,以便从该项目开始画线。目前,我正在使用硬编码的单元格高度值,它可以用于少数项目,但是当使用其他字体大小或项目列表变长时,会出现可见的偏移量。有没有一种方法来获取TreeView的单元格高度,或者另一种方法来获取TreeStore中项目的垂直位置?在Treeview中获取项目或单元格高度的像素位置
这里是方法,是我目前使用的:
int GetYPositionForPort (TreeView tree, TreeStore store, Port selectedPort)
{
// Is there a way to get the cell height?
int cellHeight = 24;
// We start in the middle of the first Treeview item
int position = cellHeight/2;
ScrolledWindow treeParent = tree.Parent as ScrolledWindow;
if (treeParent != null) {
position -= Convert.ToInt32 (treeParent.Vadjustment.Value);
}
TreeIter clientIter;
TreeIter portIter;
if (store.GetIterFirst (out clientIter)) {
do {
if (store.IterHasChild (clientIter)
&& tree.GetRowExpanded (store.GetPath (clientIter))) {
if (store.IterChildren (out portIter, clientIter)) {
do {
position += cellHeight;
} while (((Port)store.GetValue(portIter, 0) != selectedPort
|| (Client)store.GetValue(clientIter, 0) != selectedPort.Client)
&& store.IterNext(ref portIter));
}
}
//Necessary because the first Treeview item only counts as 1/2 cell height.
if (((Client)store.GetValue (clientIter, 0)) == selectedPort.Client) {
break;
}
position += cellHeight;
} while (store.IterNext(ref clientIter));
}
return position;
}
你可以看到在线条不与在TreeView的项目排列的截图底部的错误: