我正在尝试找出一种在WPF中获取滑块拇指的方法,类似于以下内容:
Slider mySlider = new Slider();
Thumb thumb = slider.Thumb;
现在我知道这并不像这么简单;但一定有一个解决方法。如果你知道任何方法,请告诉我。
谢谢!
Slider mySlider = new Slider();
Thumb thumb = slider.Thumb;
现在我知道这并不像这么简单;但一定有一个解决方法。如果你知道任何方法,请告诉我。
谢谢!
Slider
有一个TemplatePartAttribute
,声明它应该有一个名为PART_Track
的模板部分,类型为Track
。 Track
可以给我们提供对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;
}
如果您只想向拇指添加事件处理程序,并且不想等待或强制呈现以避免slider.Template
为null
,则可以执行以下操作:
slider.AddHandler(Thumb.DragStartedEvent, new DragStartedEventHandler((sender, e) =>
{
// Handling code
}));
我自己找到了解决方案,稍微借助了一下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;
}