You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:22:06