2010-05-05 3 views

Répondre

3

Pourrait en grande partie résoudre ce problème maintenant. Avec l'aide de quelques méthodes d'extension de la boîte à outils Silverlight, nous pouvons trouver la ScrollBar verticale intérieure pour toute FrameworkElement par

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

On peut alors joindre à ses événements comme Scroll ou ValueChanged.

Ensuite, il y a une autre méthode d'extension utile Toolkit nous pouvons utiliser:

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

Ce Silverlight forums post d'Octobre 2009 traite de l'absence d'un événement « VisibilityChanged » dans Silverlight et vient avec la solution d'utiliser l'événement « Loaded »:

L'événement Loaded est généralement un bon endroit pour commencer récupération des données.

Avec les contrôles onglets, l'événement Loaded pour un élément d'un onglet ne sera pas levé tant que l'utilisateur n'aura pas accédé à l'onglet sur lequel se trouve l'élément.

je sais que ce n'est pas strictement analogue à votre situation, mais il pourrait être intéressant d'essayer de voir si cela fonctionne pour un Control ou FrameworkElement.

+0

Merci, mais il ne suffit pas pour moi malheureusement. : -/... Lorsque les contrôles sont à l'intérieur des panneaux/scrollviewers, les événements 'Loaded' se déclenchent instantanément, à moins que j'utilise un VirtualizingStackPanel ou similaire, que je ne peux pas utiliser car j'ai besoin d'une mise en page plus sophistiquée. désactive le défilement jusqu'au point d'inutilité dans mon cas. – herzmeister

+0

@herzmeister - Désolé, cela ne fonctionne pas pour vous. Je ne peux pas penser à autre chose pour le moment. – ChrisF