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

.NET MAUI中如何通过名称以编程方式获取Grid项?

.NET MAUI中替代ClassId访问Grid子项的方法

首先纠正一个小问题:你之前Xamarin里的代码其实存在逻辑偏差——RowDefinitions是Grid的行定义集合,本身并不包含Button这类子控件,正确的查找对象应该是Grid的Children集合。在.NET MAUI里ClassId被移除了,下面是几种实用的替代方案:

  • 使用AutomationId
    这是MAUI官方推荐的替代方案,原本用于自动化测试,也可用来标识元素。
    先在XAML里给Button设置AutomationId:

    <Button AutomationId="btnUserName" Text="确认" />
    

    后台查找代码:

    Button targetBtn = grdOptions.Children.OfType<Button>()
        .FirstOrDefault(btn => btn.AutomationId == "btn" + name);
    
  • 使用Tag属性
    MAUI所有View控件都自带Tag属性,可存储任意自定义标识值:
    XAML设置:

    <Button Tag="btnUserName" Text="确认" />
    

    后台查找:

    Button targetBtn = grdOptions.Children.OfType<Button>()
        .FirstOrDefault(btn => btn.Tag?.ToString() == "btn" + name);
    
  • 直接用x:Name(静态场景)
    如果按钮是静态定义在XAML里的,最直接的方式是给按钮设置x:Name,后台直接调用即可,无需遍历查找:

    <Button x:Name="btnUserName" Text="确认" />
    

    后台直接操作:

    btnUserName.IsEnabled = false;
    
  • 自定义附加属性(复杂场景)
    若需要更灵活的标识逻辑,可自定义附加属性标记控件,适合批量动态生成控件的场景:
    先定义附加属性:

    public static class ControlIdentifier
    {
        public static readonly BindableProperty IdProperty =
            BindableProperty.CreateAttached("Id", typeof(string), typeof(ControlIdentifier), null);
    
        public static string GetId(BindableObject bindable)
        {
            return (string)bindable.GetValue(IdProperty);
        }
    
        public static void SetId(BindableObject bindable, string value)
        {
            bindable.SetValue(IdProperty, value);
        }
    }
    

    XAML里使用:

    <Button local:ControlIdentifier.Id="btnUserName" Text="确认" />
    

    后台查找:

    Button targetBtn = grdOptions.Children.OfType<Button>()
        .FirstOrDefault(btn => ControlIdentifier.GetId(btn) == "btn" + name);
    

内容的提问来源于stack exchange,提问作者Prens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:44:53