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

WPF中如何在TextBox内容变化时修改TextBlock的TextString内容

问题根因

你遇到的System.NullReferenceException空引用异常由两个问题共同导致:

  • XAML中已经为TextBox声明了TextChanged="TextBox_TextChanged"事件绑定,在InitializeComponent()执行过程中,解析XAML给TextBox赋值初始文本Text="TextBox"时会触发TextBox_TextChanged事件,此时TextString控件还没完成初始化,值为null,访问TextString.Text就会抛出空引用异常。
  • 后台构造函数中又重复订阅了一次TextChanged事件,属于多余操作,会导致后续文本变更时事件触发两次。
解决方案

你可以任选以下一种方式修改:

方式1:移除XAML中的事件声明,仅保留后台订阅

删除XAML里TextBox的TextChanged="TextBox_TextChanged"属性即可,这样只有构造函数里InitializeComponent()执行完成、所有控件都初始化后才会订阅事件,不会触发初始化阶段的空引用。
修改后的XAML对应TextBox代码:

<TextBox x:Name="textBox" HorizontalAlignment="Left" Margin="296,161,0,0" Text="TextBox" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

后台代码无需额外调整。

方式2:保留XAML的事件声明,移除后台重复订阅,同时加空值判断

  • 删掉构造函数里的this.textBox.TextChanged += TextBox_TextChanged;代码行,避免重复订阅。
  • 给TextBox_TextChanged方法加上空值判断,避免初始化阶段控件未加载完成导致的空引用:
    修改后的后台方法代码:
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    if (TextString != null && textBox != null)
    {
        TextString.Text = textBox.Text;
    }
}
最优实践(推荐)

WPF原生支持数据绑定,无需手写事件即可实现两个控件内容联动,直接修改XAML中TextBlock的Text属性绑定到TextBox的Text即可,不需要任何事件相关的后台代码:

<TextBlock x:Name="TextString" HorizontalAlignment="Left" Margin="459,163,0,0" Text="{Binding ElementName=textBox, Path=Text}" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>

该方式代码更简洁,也从根源上避免了空引用问题。

内容的提问来源于stack exchange,提问作者홍영주

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:39:00