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

访问RoutedEventArgs嵌套Tag属性报无定义错误如何解决

报错原因

e.OriginalSource 属性的静态声明类型是 object,C# 编译器做静态类型检查时,只会识别object类型自带的公开成员,而object类型没有定义Tag属性,所以写e.OriginalSource.Tag会直接报编译错误。
你调试时能在断点下看到Tag属性,是因为调试器读取的是运行时该对象的实际类型(也就是你创建的ListBoxItem实例)的成员,和编译阶段的静态校验逻辑无关。

修复方案

先把e.OriginalSource显式转换为ListBoxItem类型,再访问对应属性即可,推荐用模式匹配做安全转换,同时避免路由事件冒泡时OriginalSource是控件内部子元素导致的转换异常:

private void Address_Clicked(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource is ListBoxItem selectedItem && selectedItem.Tag is AddressInfo addressInfo)
    {
        // 直接从强类型业务模型取地址,不需要靠ToString()截取字符串
        GeocodeAddressTbx.Text = addressInfo.Address_Full;
        // 后续可直接使用addressInfo下的ID、Nickname、Notes等所有业务字段
    }
}

注意:你之前用ToString()替换固定前缀取地址的写法稳定性很差,只要.NET版本变更、控件模板调整导致ListBoxItem的ToString()返回格式变化,截取逻辑就会失效,直接读取Tag里存的强类型业务数据才是合规写法。

  • 不要直接写强制转换(ListBoxItem)e.OriginalSource,路由事件触发时OriginalSource可能是ListBoxItem可视化树内部的子元素(比如显示文本的TextBlock),直接强转容易抛出运行时异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:27:27