2010-05-05 2 views

ответ

3

В значительной степени решить эту проблему можно по сей день. С помощью некоторых методов расширения в Silverlight Toolkit, мы можем найти внутреннюю вертикальную ScrollBar для любого FrameworkElement по

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

Затем мы можем приложить к ее событиям, как Scroll или ValueChanged.

Тогда есть еще один полезный метод расширения Toolkit можно использовать:

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

Это Silverlight forums post с октября 2009 года обсуждает отсутствие события «VisibilityChanged» в Silverlight и придумывает решение с использованием «Loaded» событие:

Загруженный событие, как правило, хорошее место, чтобы начать Извлечение данных.

С элементами управления вкладками событие Loaded для элемента на вкладке не будет поднято до тех пор, пока пользователь не перейдет на вкладку, в которой находится элемент.

Я знаю, что это не строго аналогично с вашей ситуации, но это может быть стоит попробовать, чтобы увидеть, если он работает для Control или FrameworkElement.

+0

Спасибо, но это не достаточно для меня, к сожалению. : -/... Когда элементы управления находятся внутри панелей/scrollviewers, события «Loaded» будут срабатывать мгновенно, если я не использую «VirtualizingStackPanel» или тому подобное, которые я не могу использовать, потому что мне нужен более сложный макет, и это un-smoothes прокручивается до точки бесполезности в моем случае. – herzmeister

+0

@herzmeister - Извините, это не сработает для вас. Я не могу думать ни о чем другом, что было бы в данный момент. – ChrisF

Смежные вопросы