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

如何在Xamarin UWP中拼接多个字符串生成x:Name属性值?

核心结论

首先明确:你不能通过绑定或字符串拼接动态生成x:Name属性值。
x:Name是编译时属性,XAML编译器会直接将其值作为后台类的字段名生成对应代码,必须在编译期就确定唯一的常量值,不支持运行时动态计算、绑定或者字符串格式化。
如果你确实要读取控件的Name属性,运行时可以通过FrameworkElement.Name属性拿到对应的值,但因为x:Name不能动态生成,这个路径对你的需求没有实际意义。

替代实现方案

你要获取对应DriveItem.Name完全不需要折腾x:Name,以下两种方案都可以直接实现需求:

方案1:直接通过DataContext获取(最优)

你这个Label的DataContext本身就绑定了对应的DriveItem实例,事件处理里直接取即可,XAML不需要加额外属性:

<Label Grid.Column="1"
       Text="{Binding Path=DriveItem.Publication.Level,Converter={StaticResource IconValueConverter}}"
       FontFamily="Segoe MDL2 Assets"
       FontSize="Small"
       PropertyChanged="CheckoutStatusChanged"/>

后台事件处理代码:

private void CheckoutStatusChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    var selectedLabel = (Label)sender;
    // 直接取DataContext里的DriveItem,替换为你实际的DriveItem类型即可
    var driveItem = (DriveItem)selectedLabel.DataContext;
    string fileName = driveItem.Name;
    // 执行后续逻辑
}

方案2:用Tag属性存自定义标识

如果你的数据层级比较复杂,不想转换DataContext,也可以把需要的文件名绑定到Tag属性(Tag是FrameworkElement自带的通用自定义存储属性,支持任意类型绑定):
XAML写法:

<Label Grid.Column="1"
       Tag="{Binding Path=DriveItem.Name}"
       Text="{Binding Path=DriveItem.Publication.Level,Converter={StaticResource IconValueConverter}}"
       FontFamily="Segoe MDL2 Assets"
       FontSize="Small"
       PropertyChanged="CheckoutStatusChanged"/>

后台取值:

private void CheckoutStatusChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    var selectedLabel = (Label)sender;
    string fileName = selectedLabel.Tag.ToString();
    // 执行后续逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:05