2010-07-12 1 views

답변

10

Slider이 템플릿의 일부 유형 TrackPART_Track라고해야 선언하는 TemplatePartAttribute 있습니다. TrackThumb에 대한 참조를 제공 할 수 있습니다. SliderTrack이없는 템플릿을 제공 할 수 있으며,이 경우 Thumb이 표시되지 않습니다.

private static Thumb GetThumb(Slider slider) 
{ 
    var track = slider.Template.FindName("PART_Track", slider) as Track; 
    return track == null ? null : track.Thumb; 
} 
+3

내 경우, slider.Template == null, 이제 어떻게해야합니까? – Cuero

+0

템플릿이 슬라이더에 대해 null 인 경우의 해결책은 무엇입니까? – deathrace

2

VisualTreeHelper에서 약간의 도움을 받아 해결책을 찾았습니다. 모든 최적화이 크게 감사합니다 :

private Thumb Thumb 
{ 
    get 
    { 
     return GetThumb(this /* the slider */) as Thumb;; 
    } 
} 

private DependencyObject GetThumb(DependencyObject root) 
{ 
    if (root is Thumb) 
     return root; 

    DependencyObject thumb = null; 

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++) 
    { 
     thumb = GetThumb(VisualTreeHelper.GetChild(root, i)); 

     if (thumb is Thumb) 
      return thumb; 
    } 

    return thumb; 
}