【发布时间】:2021-05-17 05:13:16
【问题描述】:
我正在使用“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;
}
【问题讨论】:
-
你能用上面的代码得到scrollView实例吗?
-
@NicoZhu-MSFT 是的,我可以,但只有当数据网格中有项目时,否则它返回 null,我得到的实例是无用的。无论我做什么,它的垂直偏移始终为 0,并且它的事件不会触发,就像它没有连接到我的数据网格或其他东西一样。
-
DataGrid模板中没有ScrollViewer:github.com/windows-toolkit/WindowsCommunityToolkit/blob/main/…
-
@OlegMikhailov 谢谢,这为我指明了正确的方向。