我有一個GridView
。我正在使用嵌套的ScrollViewer
的SnapPoints
將每個記錄捕捉到視圖中。因爲這只是一個視覺上的變化,而不是數據變化,所以我怎樣才能確定哪些記錄是當前可見的?類似SelectedItem
,但是是一個可視化查詢。我可以檢查每個記錄,但似乎效率低下。想法?ScrollViewer中可見什麼?
回答
你的情況,你可以使用從WinRT的XAML工具包VisualTreeHelperExtensions
,做這樣的事情
gridView
.GetDescendantsOfType<GridViewItem>()
.Select(gvi => gridView.ItemFromContainer(gvi));
它確實有點密集的視覺樹搜索,但如果你的GridView
使用虛擬化,因爲可能是爲您的方案確定返回的項目在視圖端口中或附近。如果你想更精確,你可以測試邊界矩形交點。像這樣的東西可能就足夠了:
static class RectExtensions
{
public static bool ContainsPartOf(this Rect bigRect, Rect smallRect)
{
// this is a very targeted test for horizontally scrollable smallRects inside of a bigRect
return bigRect.Left < smallRect.Left && bigRect.Right > smallRect.Left ||
bigRect.Left < smallRect.Right && bigRect.Right > smallRect.Right;
}
}
var sv = gridView.GetFirstDescendantOfType<ScrollViewer>();
var bigRect = new Rect(0, 0, sv.ActualWidth, sv.ActualHeight);
gridView
.GetDescendantsOfType<GridViewItem>()
.Where(gvi => bigRect.ContainsPartOf(gvi.GetBoundingRect(sv)))
.Select(gvi => gridView.ItemFromContainer(gvi));
在這種情況下,爲什麼不使用Items?或者如果你有約束力,可以投射ItemsSource? –
那麼,如果你的列表被虛擬化了,那麼可視化樹中的'GridViewItems'就在視口中或附近,所以它們基本上與「當前可見」幾乎相同。如果您需要查看視覺樹中的哪些 - 您可以抓住它們的邊界矩形並查看它們是否位於視圖端口內。 –
我希望它更容易 –
- 1. ScrollViewer可見?
- 2. ScrollViewer中的圖像,完全可見&zoomable?
- 3. 我可以使用該scrollviewer做什麼?
- 4. 高度爲0時ScrollViewer仍然可見
- 5. WPF ScrollViewer控件按鈕的可見性
- 6. 爲什麼jcombobox不可見?
- 7. 爲什麼GlobalAuthenticationConfigurerAdapter.init()不可見?
- 8. 爲什麼detailTextLabel不可見
- 9. 爲什麼是可見的
- 10. 爲什麼IMetadataExchange不可見?
- 11. 爲什麼MovieClip不可見?
- 12. 爲什麼textviews不可見?
- 13. 爲什麼sun.management.OperatingSystemImpl包可見?
- 14. WPF - 決定哪個是可見的畫布ScrollViewer中
- 15. ScrollViewer中的ScrollViewer
- 16. matlab:如何設置動態不可見什麼是可見的
- 17. 在ScrollViewer的滾動條可見性(WPF)上觸發
- 18. 當ScrollBar可見時,WPF ScrollViewer顯示邊框
- 19. 設置scrollviewer的垂直滾動條是可見的
- 20. Silverlight scrollviewer的滾動條在不活動時不可見
- 21. 如何在使用ScrollViewer時使滾動條可見?
- 22. 如何將wpf datagrid scrollviewer visiblity綁定到按鈕可見性?
- 23. WPF Scrollviewer當ScrollBar可見時,DesiredSize不會增加
- 24. 爲什麼我的JavaFX PathTransition不可見?
- 25. 爲什麼這部分html不可見?
- 26. 爲什麼這個窗口不可見?
- 27. 爲什麼內聯塊不「可見」?
- 28. 什麼是(#210)用戶不可見
- 29. 爲什麼這個JPanel不可見?
- 30. 爲什麼這些標籤不可見
你需要什麼東西是真正可見的,還是足以讓東西虛擬化(當前有'GridViewItems')? –
有趣的是 - 我今天實際上需要同樣的功能(今晚)。我可能會使用擴展方法... –
您是否找到了解決方法? –