代码之家  ›  专栏  ›  技术社区  ›  Carlo

抓住滑块的拇指

  •  3
  • Carlo  · 技术社区  · 14 年前

    我只是想找出一种在WPF中获得滑块拇指的方法,比如:

    Slider mySlider = new Slider();
    
    Thumb thumb = slider.Thumb;
    

    3 回复  |  直到 9 年前
        1
  •  11
  •   Quartermeister    14 年前

    Slider 有一个 TemplatePartAttribute 声明它应该有一个名为 PART_Track 类型 Track . 这个 轨道 可以给我们一个参考 Thumb . 请记住,有可能 滑块 轨道 拇指

    private static Thumb GetThumb(Slider slider)
    {
        var track = slider.Template.FindName("PART_Track", slider) as Track;
        return track == null ? null : track.Thumb;
    }
    
        2
  •  2
  •   Carlo    14 年前

    我自己找到了解决办法 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;
    }
    
        3
  •  2
  •   tuanh118    6 年前

    slider.Template 存在 null ,您可以这样做:

    slider.AddHandler(Thumb.DragStartedEvent, new DragStartedEventHandler((sender, e) =>
    {
        // Handling code
    }));