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

在C#中如何正确获取XAML元素声明的x:Name属性值?

解决方案

你遇到的报错大概率是两类原因:1. 没有对转换后的checkBox做非空判断,当sender不是CheckBox类型时转换结果为null,访问Name属性会触发空引用异常;2. 部分XAML框架(如MAUI、早期UWP)没有公开Name属性的公共getter,无法直接访问。

以下是两种可行的实现方案:

  • 方案1:推荐用Tag属性传递自定义标识(兼容性最好,Tag是XAML框架预留的用户自定义数据存储字段,更适合做运行时标识判断)
    XAML中给对应CheckBox声明添加Tag属性:

    <CheckBox x:Name="whatever" Tag="whatever" CheckedChanged="CB_Changed"/>
    

    后台代码调整为:

    private void CB_Changed(object sender, CheckedChangedEventArgs e)
    {
        if (sender is CheckBox checkBox && checkBox.Tag?.ToString() == "whatever")
        {
            // Do something
        }
    }
    
  • 方案2:直接获取x:Name属性值
    如果确实需要读取x:Name的运行时值,可通过依赖属性获取的方式实现,适配WPF、MAUI、WinUI等绝大多数XAML框架:

    private void CB_Changed(object sender, CheckedChangedEventArgs e)
    {
        if (sender is CheckBox checkBox)
        {
            string name = (string)checkBox.GetValue(FrameworkElement.NameProperty);
            if (name == "whatever")
            {
                // Do something
            }
        }
    }
    

    补充:如果是WPF框架,CheckBox.Name本身是公开属性,只要做好非空判断即可直接使用,不需要额外调用GetValue方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:10