【发布时间】:2019-01-15 03:32:59
【问题描述】:
我有两个 ScrollViewer,当任何 ScrollViewer 发生更改时,我需要同步这些 ScrollViewer 的位置,但现在假设当任何人 scrollviewer2 发生更改时,然后在调用 ScrollViewer1 的 ChangeView 事件时,它会触发其 ViewChangedEvent 正在重置 ScrollViewer2 位置.
private void Scroll(ScrollViewer changedScrollViewer)
{
var group = ScrollViewers[changedScrollViewer];
VerticalScrollOffsets[group] = changedScrollViewer.VerticalOffset;
HorizontalScrollOffsets[group] = changedScrollViewer.HorizontalOffset;
foreach (var scrollViewer in ScrollViewers.Where(s => s.Value == group && s.Key != changedScrollViewer))
{
scrollViewer.Key.ViewChanged -= ScrollViewer_ViewChanged;
if (scrollViewer.Key.VerticalOffset != changedScrollViewer.VerticalOffset)
{
scrollViewer.Key.ChangeView(null, changedScrollViewer.VerticalOffset, null, true);
}
if (scrollViewer.Key.HorizontalOffset != changedScrollViewer.HorizontalOffset)
{
scrollViewer.Key.ChangeView(changedScrollViewer.HorizontalOffset, null, null, true);
}
//Commenting this line works. But I need to set ViewChange event back.
scrollViewer.Key.ViewChanged += ScrollViewer_ViewChanged;
}
}
【问题讨论】:
-
因此,滚动查看器会在以下情况下更改视图:1) 用户滚动 2) 您调用
ChangeView,您希望在 (1) 发生时同步它们,而不是 (2) 。您可以使用标志来确保 . -
谢谢,一些代码参考会有所帮助。
标签: c# xaml uwp windows-runtime