在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
相关产品推荐
相关产品推荐

