Silverlight中的“滚动到Viewport”类似的事件

时间:2010-05-05 10:37:46

标签: silverlight events scroll viewport

在Silverlight中,如果Control(或任何FrameworkElement)已滚动到视口中并且现在可见,是否有任何方法可以获取通知事件?

我想实现类似Lazy Load Images jQuery Plugin的内容。

2 个答案:

答案 0 :(得分:3)

现在可以在很大程度上解决这个问题。借助Silverlight Toolkit的一些扩展方法,我们可以通过

找到任何ScrollBar的内部垂直FrameworkElement
Scrollbar myScrollBar = myContainerElement.GetVisualDescendants()
        .OfType<ScrollBar>()
        .Where(foundScrollBar => foundScrollBar.Orientation == Orientation.Vertical)
        .FirstOrDefault();

然后我们可以附加其ScrollValueChanged等事件。

然后我们可以使用另一种有用的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事件。

我知道这与您的情况并不完全相似,但可能值得尝试查看它是否适用于ControlFrameworkElement