2010-10-09 30 views
1

我有一个自定义控件。有一个堆叠面板与按键和TextBlock的在generic.xaml:如何从代码隐藏中更改TextBlock文本?

<StackPanel> 
<TextBlock x:Name="StatusText" /> 
</StackPanel> 

然后,我有

public class MyClass : Control 
{ 
// Constructor etc. 

public static readonly DependencyProperty StatusTextProperty = DependencyProperty.Register("StatusText", typeof(TextBlock), typeof(MyClass), null); 

public TextBlock StatusText 
{ 
get { return (TextBlock)this.GetValue(StatusTextProperty); } 
set { SetValue(StatusTextProperty, value); } 
} 
} 

有如果与单击该按钮后,某些逻辑发生。 如何更改TextBloc的Text属性? 我认为我可以做这样的事情

StatusText.SetValue(TextBlock.TextProperty, "Some text here."); 

但它总是返回的NullReferenceException(未将对象引用设置到对象的实例。)

我应该对依赖属性或什么用PropertyChangedCallback()我需要吗?我失去了一些东西;-)

回答

1

你采取错误的做法 - 而不是试图文成从控制的类文本块,你需要的文本块从价值控制班。您需要执行的主要步骤如下:

  1. 将依赖项属性的类型从TextBlock更改为字符串。

  2. 使用TemplateBinding绑定表达式将控件模板中的TextBlock的Text属性绑定到依赖项属性。沿着线的东西:

    < TextBlock的文本=“{TemplateBinding状态文本}” />

然后,您可以简单地设置要显示在您的控件的属性的文本。

希望这有助于...

克里斯

+0

如果文本已经绑定了,我想获得一个stackpanel内的textblock的当前值? – Freakishly 2011-06-08 02:24:46

-6

您可以输入您对谷歌的问题,并找到答案几次快。

+4

您是否注意到Google发现的结果是这个问题? :-) – nubm 2010-10-10 15:05:59

+0

SO是Google的专业版本,具有评分系统等。此处的答案质量要高得多。如果谷歌有所有的答案,你甚至在这里做什么? – ProfK 2013-09-05 07:08:48

+0

亲爱的@ProfK 我nevers写道,谷歌有所有答案:) 但很多问题可以很容易地发现那里,这是其中之一。 – 2013-09-05 08:22:30