在Silverlight中,如果Control
(或任何FrameworkElement
)已滚动到视口中并且现在可见,是否有任何方法可以获取通知事件?
我想实现类似Lazy Load Images jQuery Plugin的内容。
答案 0 :(得分:3)
现在可以在很大程度上解决这个问题。借助Silverlight Toolkit的一些扩展方法,我们可以通过
找到任何ScrollBar
的内部垂直FrameworkElement
Scrollbar myScrollBar = myContainerElement.GetVisualDescendants()
.OfType<ScrollBar>()
.Where(foundScrollBar => foundScrollBar.Orientation == Orientation.Vertical)
.FirstOrDefault();
然后我们可以附加其Scroll
或ValueChanged
等事件。
然后我们可以使用另一种有用的Toolkit扩展方法:
Rect? rect = myElement.GetBoundsRelativeTo(myViewportElement);
if (rect.HasValue)
{
if (rect.Value.Top <= myViewportElement.ActualHeight)
{
// do some stuff
}
}
答案 1 :(得分:1)
2009年10月的这个Silverlight forums post讨论了Silverlight中缺少“VisibilityChanged”事件,并提出了使用“已加载”事件的解决方案:
Loaded事件通常是开始检索数据的好地方。
使用选项卡控件,在用户导航到元素所在的选项卡之前,不会引发选项卡上元素的Loaded事件。
我知道这与您的情况并不完全相似,但可能值得尝试查看它是否适用于Control
或FrameworkElement
。