

新闻资讯
技术教程FindControl() 是 Avalonia 中按名称查找控件的最常用方式,需在 InitializeComponent() 执行后、控件已加载时调用,且 XAML 中必须显式设置 Name 属性,类型 T 必须与实际控件类型一致。
在Avalonia中,FindControl 是最常用、最直接的控件查找方式,用于在XAML定义的UI树中按名称定位控件实例。它必须在控件已加载(即 InitializeComponent() 已执行、可视化树已构建)之后调用,否则返回 null。
Avalonia 不支持 WPF 那样的“自动字段生成”(如自动生成 private Button myButton;),所有需要代码访问的控件,都必须在 XAML 中显式设置 Name 属性:
(如 Mapsui 场景)推荐在 OnLoaded 事件或 InitializeComponent() 之后调用,确保 UI 已完成初始化:
InitializeComponent()
var btn = this.FindControl
T 必须与目标控件的实际类型一致,否则返回 null(不抛异常)FindControl 默认只在当前控件的直接子元素中搜索;如需跨层级查找,可链式调用或使用更明确的路径:
this.FindControl("mainGrid")?.FindControl("inputBox") Templates 或 VisualTreeHelper 遍历,但日常
开发中极少需要——命名+层级结构已覆盖绝大多数场景FindControl 不带名称)批量查找,必须指定 Name
以下写法容易出错,需避免:
Name,只写 x:Name(Avalonia 不识别 x:Name,只认 Name)InitializeComponent() 前调用 FindControl
TextBlock 当作 Label 查找(Avalonia 中没有 Label,常用的是 TextBlock 或 ContentControl)Name="mapCtl",代码里写成 "mapControl"