2011-08-23 10 views
6

Chciałbym uzyskać dostęp do paska przewijania z mojego ScrollViewer.WPF: Jak programowo wyodrębnić pasek przewijania z programu Scroll Viewer?

Myślę, że jest ukryta gdzieś w szablonie ScrollViewer, czy jest jakiś sposób, aby uzyskać do niego dostęp i uzyskać odniesienie do niego programowo?

Więc jeśli mam

<ScrollViewer x:Name="myScrollViewer"> 

W kodzie za Chciałbym iść:

ScrollBar scrollBar = myScrollViewer.GetScrollBar(); 

(oczywiście zakładam, że to będzie trudniejsze, niż tylko to)

Odpowiedz

13

Myślę, że mam go ....

myScrollViewer.ApplyTemplate(); 

ScrollBar s = myScrollViewer.Template.FindName("PART_VerticalScrollBar", myScrollViewer) as ScrollBar; 
+0

Nieruchomość Szablon jest typu 'ControlTemplate' nie zawiera dzieciom, że można znaleźć. – AnthonyWJones

+0

Tak, to prawda. To działa, przetestowane w WPF. –

+0

'ApplyTemplate()' musi być wywołana na 'ScrollViewer', aby znaleźć paski przewijania. Jeśli wywołasz kod z tej odpowiedzi w 'public override void OnApplyTemplate()' formantu zawierającego ScrollViewer, to nie przyniesie żadnych wyników bez wywoływania 'myScrollViewer.ApplyTemplate()'. – zmechanic

3

Musisz użyć metody VisualTreeHelper.GetChild, aby przejść drzewo wizualne obiektu ScrollViewer, aby znaleźć ScrollBar.

Ponieważ ta metoda zapewnia bardzo niskopoziomową funkcjonalność, a użycie jej w wysokopoziomowym kodzie będzie bolesne, prawdopodobnie będziesz chciał użyć takiego opakowania, jak LINQ to visual tree.

1

Pobierz kod VisualTreeEnumerator z tego bloga article.

Z tej klasie przedłużenie w miejscu: -

ScrollBar s = myScrollViewer.Decendents() 
       .OfType<ScrollBar>() 
       .FirstOrDefault(sb => sb.Name == "PART_VerticalScrollBar"); 
+0

'ApplyTemplate()' musi być wywołana na 'ScrollViewer', aby znaleźć paski przewijania. Jeśli wywołasz kod z tej odpowiedzi w 'public override void OnApplyTemplate()' formantu zawierającego ScrollViewer, to nie przyniesie żadnych wyników bez wywoływania 'myScrollViewer.ApplyTemplate()'. – zmechanic

Powiązane problemy