我有一个DataGrid,其中ItemsSource绑定到ObservableCollection< LogEntry>.单击按钮,用户可以滚动到特定的LogEntry.因此我使用以下代码:
private void BringSelectedItemIntoView(LogEntry logEntry) { if (logEntry != null) { ContentDataGrid.ScrollIntoView(logEntry); } }
这只是工作正常.但我不喜欢的是:如果LogEntry已经在视图中,那么DataGrid很快就会闪烁.
我现在的问题是:
如果给定的LogEntry已经在视图中,是否有可能检查DataGrid?
解决方法
您可以获取第一个可见项目和最后一个可见项目的索引
var verticalScrollBar = GetScrollbar(DataGrid1,Orientation.Vertical); var count = DataGrid1.Items.Count; var firstRow = verticalScrollBar.Value; var lastRow = firstRow + count - verticalScrollBar.Maximum; // check if item index is between first and last should work
private static ScrollBar GetScrollbar(DependencyObject dep,Orientation orientation) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dep); i++) { var child = VisualTreeHelper.GetChild(dep,i); var bar = child as ScrollBar; if (bar != null && bar.Orientation == orientation) return bar; else { ScrollBar scrollBar = GetScrollbar(child,orientation); if (scrollBar != null) return scrollBar; } } return null; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。