2010-07-12 76 views
3

我只是试图找出一种方式来获得在WPF中的滑块的拇指拇指,像这样:获取的滑块

Slider mySlider = new Slider(); 

Thumb thumb = slider.Thumb; 

现在我知道这是不可能的,因为这样简单;但是必须有一个解决这个问题的方法。如果你知道的话,让我知道。

谢谢!

回答

10

SliderTemplatePartAttribute声明它应该有一个模板部分称为TrackPART_TrackTrack可以给我们参考Thumb。请记住,可以给Slider一个没有Track的模板,在这种情况下不会有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 2012-09-21 00:44:11

+0

模板滑块为空时的任何解决方案? – deathrace 2013-05-15 04:21:44

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; 
}