WPF中报错:“未将对象引用设置到对象的实例。”

项目场景:

       在WPF中,我们经常需要使用到各种控件的属性,不管是在后端还是前端,都避免不了对控件的操作,但是大家在使用的过程中我们一定要注意一个很重要的细节!!!


问题描述

       今天我想从后台动态设置前端控件的属性时,突然遇到一个问题,我的控件都显示“未将对象引用设置到对象实例”。代码如下:

前端代码
<Grid Grid.Column="2">
	<TextBlock HorizontalAlignment="Left"
               Margin="0 6 0 6"
               TextWrapping="Wrap"
               Text="断面类型:"
               VerticalAlignment="Center"
               Height="15"
               Width="60" />
</Grid>
后端代码:
 public void CrossSectionTextIsEnabled(BIM_CrossSection crossSection, bool temp)
        {
            //this.SectionName.IsEnabled = temp;
            //this.SectionType.Text = crossSection.EarlySupportFill.ToString();
            this.SectionType.IsEnabled = temp;
            //this.SectionLevel.IsEnabled = temp;
            //this.IsArchUp.IsEnabled = temp;
            //this.ArchUpFill.IsEnabled = temp;
            this.SecondArch.IsEnabled = temp;
            this.SecondUp.IsEnabled = temp;
            this.FirstArch.IsEnabled = temp;
            this.FirstUp.IsEnabled = temp;
            this.R4.IsEnabled = temp;
        }

       这段代码表面上看起来确实没什么问题,也符合WPF的语法。


原因分析:

       后来通过认真查看代码,发现在初始化组件的时候出问题了。

错误示范:
        public Win_ManageWindow(string sectionId)
        {
            Id = sectionId;
            CrossSectionTextIsEnabled(crossSection, temp);
            InitializeComponent();
            LoadSource(sectionId, 1);
        }

       InitializeComponent()函数是初始化前端组件的,是将前端的各个组件加载到后端的。因此该代码的调用应该位于调用组件之前!!!


解决方案:

       将InitializeComponent()函数设置到调用组件之前,即可解决该问题。

public Win_ManageWindow(string sectionId)
        {
            Id = sectionId;
            InitializeComponent();
            CrossSectionTextIsEnabled(crossSection, temp);
            LoadSource(sectionId, 1);
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值