我想知道WPF DataGrid
實際顯示了多少行。計算DataGrid中可見行的數量
我試圖遍歷DataGridRow
和檢查IsVisible
,但似乎行報告IsVisible = true
即使他們不在DataGrid
口中。
如何正確計數可見行數?
我想知道WPF DataGrid
實際顯示了多少行。計算DataGrid中可見行的數量
我試圖遍歷DataGridRow
和檢查IsVisible
,但似乎行報告IsVisible = true
即使他們不在DataGrid
口中。
如何正確計數可見行數?
我問過這個問題,也MSDN論壇,並得到了good answer:
private bool IsUserVisible(FrameworkElement element, FrameworkElement container) {
if (!element.IsVisible)
return false;
Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
}
一個簡單的黑客浮現在腦海中,
遍歷所有行,並檢查是否有物品的容器?
dataGrid.GetContainerFromItem(dataGrid.Items[row]);
希望這有助於
我曾與行顯示爲Visible = true
,即使他們間沒有同樣的問題「T。
試圖想出一個解決方案,我發佈了這個問題:Visible rows in DataGrid is off by 1 (counted using ContainerFromItem)。
下面是我工作:
uint VisibleRows = 0;
var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid");
foreach(var Item in TicketGrid.Items) {
var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item);
if(Row != null) {
if(Row.TransformToVisual(TicketGrid).Transform(new Point(0, 0)).Y + Row.ActualHeight >= TicketGrid.ActualHeight) {
break;
}
VisibleRows++;
}
}
對於進一步的指導,也有一些/* comments */
在我的答案上鍊接的問題,以及對問題本身,導致瞭解答用戶評論線程。
這不起作用。事實上,在我的循環中,我使用了'ItemContainerGenerator.ContainerFromIndex',一些沒有顯示的項目仍然有容器。 – 2011-05-12 15:44:50