如何解决UWP 获取Datagrid 的ScrollViewer 的垂直偏移量
我正在使用“Microsoft.Toolkit.Uwp.UI.Controls”中的数据网格,并且我正在尝试获取内置于其中的 scrollViewer,以便能够在全部滚动时获取垂直偏移并实现某些行为到底部或中间的方式。到目前为止,我已经尝试了许多在其他不同线程中找到的方法,例如下面的方法,它们扫描可视化树并获取 scrollViewer。但是从这个方法返回的 scrollViewer 的 verticalOffset 属性的值总是零,而且它的事件像 ViewChanged 永远不会被触发,我试过调用 updateLayout 方法但它没有改变。
我还尝试将数据网格包装在滚动查看器中并改为使用它。虽然效果很好,但由于虚拟化,它导致了巨大的性能问题。那么有什么解决办法吗?
private ScrollViewer GetScrollViewer(UIElement element)
{
if (element == null) return null;
ScrollViewer retour = null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element) && retour == null; i++)
{
if (VisualTreeHelper.GetChild(element,i) is ScrollViewer)
{
retour = (ScrollViewer)(VisualTreeHelper.GetChild(element,i));
}
else
{
retour = GetScrollViewer(VisualTreeHelper.GetChild(element,i) as UIElement);
}
}
return retour;
}
解决方法
正如 Oleg Mikhailov 提到的 source code,它不是用 ScrollViewer
实现的,我们已经用您的代码进行了测试,我们无法获得 scrollviewer 实例。对于这种情况,您可以检测垂直滚动条的值变化事件来获取垂直偏移,请参考以下代码。
var scrollbar = MyFindDataGridChildOfType<ScrollBar>(MyDataGrid);
scrollbar.ValueChanged += Scroll_ValueChanged;
private void Scroll_ValueChanged(object sender,RangeBaseValueChangedEventArgs e)
{
Debug.WriteLine(e.NewValue);
// here is vertical value.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。