Wpf 获得滑块的拇指

Wpf 获得滑块的拇指,wpf,wpf-controls,Wpf,Wpf Controls,我只是想找出一种在WPF中获得滑块拇指的方法,类似这样: Slider mySlider = new Slider(); Thumb thumb = slider.Thumb; 现在我知道不可能这么简单;但必须围绕这一点开展工作。如果你知道的话,请告诉我 谢谢 在VisualTreeHelper的帮助下,我自己找到了解决方案。非常感谢任何优化: private Thumb Thumb { get { return GetThumb(this /* the sl

我只是想找出一种在WPF中获得滑块拇指的方法,类似这样:

Slider mySlider = new Slider();

Thumb thumb = slider.Thumb;
现在我知道不可能这么简单;但必须围绕这一点开展工作。如果你知道的话,请告诉我


谢谢

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;
}
私人拇指
{
得到
{
返回GetThumb(这个/*滑块*/)作为Thumb;;
}
}
私有DependencyObject GetThumb(DependencyObject根)
{
如果(根是拇指)
返回根;
DependencyObject thumb=null;
for(int i=0;i
有一个声明它应该有一个名为
part\u Track
类型的模板部分。
轨迹
可以为我们提供对
拇指
的参考。请记住,可以为
滑块
提供一个没有
轨迹的模板
,在这种情况下,将没有
拇指

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

如果只想向thumb添加事件处理程序,而不想等待或强制渲染以避免
slider.Template
null
,则可以执行以下操作:

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

在我的例子中,slider.Template==null,我现在应该怎么做?当滑块的模板为null时,有什么解决方案吗?这在包含滑块的自定义控件的OnApplyTemplate中非常有效。我用鼠标事件尝试的所有其他方法都适用于整个自定义控件,而不仅仅是滑块。:)