In Silverlight, is there any way to get a notification event if a Control
(or any FrameworkElement
) has been scrolled into the viewport and is now visible?
I want to implement something like the Lazy Load Images jQuery Plugin.
In Silverlight, is there any way to get a notification event if a Control
(or any FrameworkElement
) has been scrolled into the viewport and is now visible?
I want to implement something like the Lazy Load Images jQuery Plugin.
This Silverlight forums post from October 2009 discusses the lack of a "VisibilityChanged" event in Silverlight and comes up with the solution of using the "Loaded" event:
The Loaded event is usually a good place to start retrieving data.
With tab controls, the Loaded event for an element on a tab won't be raised until a user navigates to the tab the element is on.
I know it's not strictly analogous with your situation, but it might be worth trying to see if it works for a Control
or FrameworkElement
.
Could largely solve this by now. With the help of some extension methods of the Silverlight Toolkit, we can find the inner vertical ScrollBar
for any FrameworkElement
by
Scrollbar myScrollBar = myContainerElement.GetVisualDescendants()
.OfType<ScrollBar>()
.Where(foundScrollBar => foundScrollBar.Orientation == Orientation.Vertical)
.FirstOrDefault();
We can then attach to its events like Scroll
or ValueChanged
.
Then there is another helpful Toolkit extension method we can use:
Rect? rect = myElement.GetBoundsRelativeTo(myViewportElement);
if (rect.HasValue)
{
if (rect.Value.Top <= myViewportElement.ActualHeight)
{
// do some stuff
}
}