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的項目排列的截圖底部的錯誤: