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

WPF多个TextBox绑定同一TextChanged事件出现控件为null报错问题

问题原因

报错和多个文本框共用同一个事件处理方法无关,核心原因是XAML控件的初始化顺序和TextChanged事件的触发时机:
XAML中的控件按代码书写顺序依次完成初始化,你给文本框设置了默认Text="255",控件初始化时给Text属性赋值的操作会立刻触发TextChanged事件。此时排在红色文本框后面的绿色、蓝色文本框还没有完成初始化,自然是null值,访问就会抛出空引用异常。

修复方案

  • 方案1:在事件处理方法开头加空值判断,只要任意关联控件未初始化完成就直接终止执行逻辑,同时修正原有代码的逻辑漏洞,示例如下:
private void UpdateColorPickerDisplay(object sender, TextChangedEventArgs e)
{
    // 新增空值判断,所有控件初始化完成后再执行后续逻辑
    if (ColorPickerDisplayRed == null || ColorPickerDisplayGreen == null || ColorPickerDisplayBlue == null || ColorPickerDisplay == null)
        return;

    // 修复原有TryParse后多余分号的问题,同时增加数值范围校验,避免转换byte时报错
    if (int.TryParse(ColorPickerDisplayRed.Text, out int R) 
        && int.TryParse(ColorPickerDisplayGreen.Text, out int G) 
        && int.TryParse(ColorPickerDisplayBlue.Text, out int B)
        && R is >=0 and <=255 && G is >=0 and <=255 && B is >=0 and <=255)
    {
        var brush = new SolidColorBrush(Color.FromArgb(255, (byte)R, (byte)G, (byte)B));
        ColorPickerDisplay.Background = brush;
    }
}
  • 方案2:不在XAML中绑定TextChanged事件,等所在窗口/页面的Loaded事件触发后,再后台给三个文本框绑定事件,避开初始化阶段的触发。
  • 方案3:删除XAML中文本框的默认Text="255"配置,等窗口初始化完成后再后台给三个文本框赋值默认值,也可以规避初始化阶段的事件触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:03