Win10 IoT(RPi)应用开发:VS2017中C#无法识别XAML命名ListBoxItem
嘿,我来帮你解决这个问题!你遇到的C#识别不了XAML里定义的Parameter01这类控件的情况,通常是编译或XAML关联环节出了问题,下面给你一步步的解决办法,还有更优的实现思路:
一、先解决当前控件识别的问题
1. 清理并重新生成项目
VS的编译缓存偶尔会“偷懒”,导致控件对应的代码字段没生成,按以下步骤操作:
- 点击顶部菜单的生成 → 清理解决方案
- 接着点击生成 → 重新生成解决方案
- 之后再尝试访问
Parameter01,大概率就能识别了。
2. 检查XAML的x:Class属性是否匹配代码隐藏类
打开你的XAML文件(比如MainPage.xaml),查看根元素的x:Class属性是否和代码隐藏文件的命名空间、类名完全一致:
<Page x:Class="YourProjectNamespace.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:YourProjectNamespace" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
再打开对应的MainPage.xaml.cs,确保命名空间和类名完全对应:
namespace YourProjectNamespace { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); // 在这里尝试访问Parameter01 } } }
如果x:Class的命名空间或类名和代码隐藏不匹配,VS就不会生成控件的关联字段。
3. 手动重置编译环境
如果上面两步都不行,可以试试“硬核”重置:
- 关闭VS,删除项目文件夹下的
obj和bin文件夹 - 重新打开VS,加载项目并重新生成
二、更优的动态填充ListBox方式
其实你现在逐个定义Parameter01到Parameter10的方式不够灵活,当参数数量变化时还要修改XAML。推荐用数据绑定的方式,直接把数据源绑定到ListBox的ItemsSource,代码更简洁,还能避免手动操作控件的麻烦:
1. 在代码隐藏中定义数据源
我们用ObservableCollection(它能自动通知界面数据变化)来存储参数名称:
using System.Collections.ObjectModel; using Windows.UI.Xaml.Controls; namespace YourProjectNamespace { public sealed partial class MainPage : Page { // 定义可观察集合作为数据源 public ObservableCollection<string> ParameterNames { get; set; } // 假设你的Parameters数组结构如下 private Parameter[] Parameters = new Parameter[] { new Parameter { Name = "Acceleration (mm/s²)" }, new Parameter { Name = "Temperature (°C)" }, new Parameter { Name = "Humidity (%)" }, // 其他参数... }; public MainPage() { this.InitializeComponent(); // 初始化集合并填充数据 ParameterNames = new ObservableCollection<string>(); foreach (var param in Parameters) { ParameterNames.Add(param.Name); } // 绑定到ListBox的ItemsSource ParaBox.ItemsSource = ParameterNames; } } // 假设你的Parameter类结构 public class Parameter { public string Name { get; set; } // 其他属性(比如Value)可以在这里扩展 } }
2. 简化XAML中的ListBox
把原来手动添加的所有ListBoxItem删掉,只保留ListBox本身:
<ListBox x:Name="ParaBox" HorizontalAlignment="Left" Height="193" Margin="20,147,0,-340" VerticalAlignment="Top" Width="380" IsSynchronizedWithCurrentItem="False"> <!-- 不需要手动添加ListBoxItem,数据绑定会自动生成条目 --> </ListBox>
这样后续你更新ParameterNames集合时,ListBox会自动刷新显示,适配参数数量的变化。
内容的提问来源于stack exchange,提问作者Belekz
相关产品推荐
相关产品推荐

