在Silverlight中,如果Control
(或任何FrameworkElement
)已滾動到視口中並且現在可見,是否有任何方法可以獲取通知事件?Silverlight中的「滾動到Viewport」類事件
我想實現類似Lazy Load Images jQuery Plugin的東西。
在Silverlight中,如果Control
(或任何FrameworkElement
)已滾動到視口中並且現在可見,是否有任何方法可以獲取通知事件?Silverlight中的「滾動到Viewport」類事件
我想實現類似Lazy Load Images jQuery Plugin的東西。
現在可以很大程度上解決這個問題。隨着Silverlight工具包的一些擴展方法的幫助下,我們可以通過
Scrollbar myScrollBar = myContainerElement.GetVisualDescendants()
.OfType<ScrollBar>()
.Where(foundScrollBar => foundScrollBar.Orientation == Orientation.Vertical)
.FirstOrDefault();
找到任何FrameworkElement
內垂直ScrollBar
然後,我們可以將其事件像Scroll
或ValueChanged
。
然後還有另外一個有用的工具包擴展方法,我們可以使用:
Rect? rect = myElement.GetBoundsRelativeTo(myViewportElement);
if (rect.HasValue)
{
if (rect.Value.Top <= myViewportElement.ActualHeight)
{
// do some stuff
}
}
這Silverlight forums post從2009年10月討論缺乏在Silverlight中「VisibilityChanged」事件,並使用了「裝」事件的解決方案出現:
Loaded事件通常是一個良好的開端檢索數據。
使用選項卡控件時,選項卡上的元素的Loaded事件將不會引發,直到用戶導航到元素所在的選項卡。
我知道這是不是與你的情況類似嚴格,但它可能是值得一試,看看它是否適合一個Control
或FrameworkElement
。
謝謝,但遺憾的是它沒有足夠的對我來說。 : -/...當控件位於面板/滾動視圖中時,「Loaded」事件將立即觸發,除非我使用'VirtualizingStackPanel'或類似的東西,這是我無法使用的,因爲我需要更復雜的佈局,在我的情況下,無法平滑滾動到無用點。 – herzmeister 2010-05-05 10:56:33
@herzmeister - 對不起,它不適合你。我現在還想不到其他任何東西。 – ChrisF 2010-05-05 10:59:16