UWP平台下如何获取Slider的Thumb并动态修改其尺寸
UWP平台获取Slider内Thumb并动态修改尺寸的实现方案
UWP中Slider的GetTemplateChild是受保护方法,无法直接在控件外部调用,你可以通过以下两种方案实现需求:
- 水平方向原生Slider的Thumb默认命名为
HorizontalThumb - 垂直方向原生Slider的Thumb默认命名为
VerticalThumb
如果你自定义模板时修改了Thumb的x:Name,需要将后续代码中的名称替换为你自定义的名称
方案1:扩展方法全局通用获取模板子元素
先编写静态扩展类,适配所有控件的模板内子元素查找:
public static class ControlExtensions { public static T GetChildByName<T>(this DependencyObject parent, string childName) where T : DependencyObject { if (parent == null) return null; T foundChild = null; int childrenCount = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < childrenCount; i++) { var child = VisualTreeHelper.GetChild(parent, i); if (!(child is T)) { foundChild = GetChildByName<T>(child, childName); if (foundChild != null) break; } else if (!string.IsNullOrEmpty(childName)) { var frameworkElement = child as FrameworkElement; if (frameworkElement != null && frameworkElement.Name == childName) { foundChild = (T)child; break; } } else { foundChild = (T)child; break; } } return foundChild; } }
在页面Loaded事件或者按钮点击事件(确保Slider模板已加载完成)中调用即可:
Thumb myThumb = mySlider.GetChildByName<Thumb>("HorizontalThumb"); if (myThumb != null) { myThumb.Height = 50; }
方案2:自定义Slider子类封装访问逻辑
如果需要频繁操作Slider内置元素,可直接继承Slider封装访问属性:
public class CustomSlider : Slider { public Thumb HorizontalThumb => GetTemplateChild("HorizontalThumb") as Thumb; public Thumb VerticalThumb => GetTemplateChild("VerticalThumb") as Thumb; }
之后在XAML中用CustomSlider替换原生Slider,就可以直接访问对应的Thumb属性修改尺寸。
内容的提问来源于stack exchange,提问作者cristi chifan
相关产品推荐
相关产品推荐

