2010-05-05 44 views

回答

3

現在可以很大程度上解決這個問題。隨着Silverlight工具包的一些擴展方法的幫助下,我們可以通過

Scrollbar myScrollBar = myContainerElement.GetVisualDescendants() 
     .OfType<ScrollBar>() 
     .Where(foundScrollBar => foundScrollBar.Orientation == Orientation.Vertical) 
     .FirstOrDefault(); 

找到任何FrameworkElement內垂直ScrollBar然後,我們可以將其事件像ScrollValueChanged

然後還有另外一個有用的工具包擴展方法,我們可以使用:

Rect? rect = myElement.GetBoundsRelativeTo(myViewportElement); 
if (rect.HasValue) 
{ 
    if (rect.Value.Top <= myViewportElement.ActualHeight) 
    { 
     // do some stuff 
    } 
} 
1

Silverlight forums post從2009年10月討論缺乏在Silverlight中「VisibilityChanged」事件,並使用了「裝」事件的解決方案出現:

Loaded事件通常是一個良好的開端檢索數據。

使用選項卡控件時,選項卡上的元素的Loaded事件將不會引發,直到用戶導航到元素所在的選項卡。

我知道這是不是與你的情況類似嚴格,但它可能是值得一試,看看它是否適合一個ControlFrameworkElement

+0

謝謝,但遺憾的是它沒有足夠的對我來說。 : -/...當控件位於面板/滾動視圖中時,「Loaded」事件將立即觸發,除非我使用'VirtualizingStackPanel'或類似的東西,這是我無法使用的,因爲我需要更復雜的佈局,在我的情況下,無法平滑滾動到無用點。 – herzmeister 2010-05-05 10:56:33

+0

@herzmeister - 對不起,它不適合你。我現在還想不到其他任何東西。 – ChrisF 2010-05-05 10:59:16