WPF代码访问控件报错:'txt_SlaveNumber'不存在于当前上下文
解决WPF中“The name 'txt_SlaveNumber' does not exist in the current context”错误
兄弟,这问题我熟得很!你之所以遇到这个报错,核心原因是你在XAML里给控件设置的是AutomationProperties.Name,但WPF后台代码要访问控件,必须用x:Name属性。
为什么会报错?
AutomationProperties.Name是给UI自动化测试工具(比如UI Automation框架)识别控件用的,它并不会让Visual Studio在后台生成对应的控件实例字段。所以你的C#代码自然找不到txt_SlaveNumber这些名称——因为它们根本没被注册到当前上下文里。
解决方案:替换为x:Name属性
把XAML里所有需要后台访问的控件的AutomationProperties.Name替换成x:Name,这样Visual Studio会自动在MainWindow.g.cs(自动生成的代码文件)里创建对应的控件实例字段,你的后台代码就能正常访问了。
修改后的完整XAML代码:
<Window x:Class="SPMS_WIN.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SPMS_WIN" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <TextBox HorizontalAlignment="Left" Height="23" Margin="30,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" x:Name="txt_SlaveNumber"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="196,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" x:Name="txt_FunctionCode"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="361,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" x:Name="txt_StartIndex"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="543,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" x:Name="txt_DataLength"/> <Label Content="Slave Address
" HorizontalAlignment="Left" Margin="30,72,0,0" VerticalAlignment="Top" Width="120" Height="26"/> <Label Content="Function Code" HorizontalAlignment="Left" Margin="196,72,0,0" VerticalAlignment="Top" Width="120"/> <Label Content="Start Index" HorizontalAlignment="Left" Margin="361,72,0,0" VerticalAlignment="Top" Width="120"/> <Label Content="Data Length" HorizontalAlignment="Left" Margin="543,72,0,0" VerticalAlignment="Top" Width="120"/> <Button Content="Run" HorizontalAlignment="Left" Margin="30,142,0,0" VerticalAlignment="Top" Width="75" x:Name="btn_RunModbus" Click="btn_RunModbus_Click"/> </Grid> </Window>
额外提示
如果你需要保留AutomationProperties.Name用于自动化测试,可以同时设置两个属性,比如:
<TextBox ... x:Name="txt_SlaveNumber" AutomationProperties.Name="txt_SlaveNumber"/>
修改完成后,记得重新生成项目(Build -> Rebuild Solution),确保自动生成的代码更新到位,之后你的C#代码就能正常读取控件的Text属性了。
内容的提问来源于stack exchange,提问作者hmahdavi
相关产品推荐
相关产品推荐

