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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:16