MAUI 9.0中能否通过FindByName获取ContentView.ControlTemplate内元素?
在MAUI 9.0中获取ControlTemplate内部元素的正确方式
不能直接通过this.FindByName<Border>("Scrollbar")获取<ContentView.ControlTemplate>内的元素,原因是:ControlTemplate属于模板定义,其内部元素的命名空间是模板实例化后的可视化树,而非ContentView本身的可视化树,所以直接在ContentView上下文调用FindByName无法定位到这些元素。你能拿到ControlTemplate实例是因为它是ContentView的直接属性,属于ContentView的命名查找范围。
要获取ControlTemplate内的元素,需使用GetTemplateChild方法,这是MAUI中专门用于访问模板内部元素的API,且需在模板完成实例化的时机调用,最佳时机是重写OnApplyTemplate方法(模板应用完成时会触发此回调)。
示例代码如下:
protected override void OnApplyTemplate() { base.OnApplyTemplate(); // 获取模板内的Border元素 var scrollbar = GetTemplateChild("Scrollbar") as Border; if (scrollbar != null) { // 在此处对scrollbar进行操作 } }
注意:如果在OnApplyTemplate之外调用GetTemplateChild,需确保模板已经完成实例化,否则会返回null。
内容的提问来源于stack exchange,提问作者infinitesimal
相关产品推荐
相关产品推荐

