WPF中修改Control Template内嵌TextBlock的Text值遇Null错误求助
解决WPF中ControlTemplate内TextBlock无法修改的问题
问题原因
你当前代码里用this.Template.FindName("txtBlk", this)查找控件,这里的this是Window实例,但你的ControlTemplate是应用在Button控件上的,Window并没有使用这个模板,所以找不到目标TextBlock,返回null导致报错。
修复方案
点击事件中,应该从触发事件的Button(也就是sender参数)中查找模板内的控件,修改后的C#代码如下:
private void panelBtn_Click(object sender, RoutedEventArgs e) { // 将sender转换为Button实例 var targetBtn = sender as Button; if (targetBtn == null) return; // 通过Button的Template查找TextBlock var text = (TextBlock)targetBtn.Template.FindName("txtBlk", targetBtn); if (text != null) { text.Text = txtBox.Text; } }
额外说明
- 加入
null判断可以避免后续潜在的空引用异常,让代码更健壮。 - 确保你的Button确实应用了这个名为
panel的ControlTemplate,比如Button的XAML要设置Template="{StaticResource panel}"。
内容的提问来源于stack exchange,提问作者Bradley Deans
相关产品推荐
相关产品推荐

