【问题标题】:How to change TextBlock Text from codebehind?如何从代码隐藏中更改 TextBlock 文本?
【发布时间】:2011-04-23 07:43:56
【问题描述】:

我有一个自定义控件。 generic.xaml 中有一个带有 Button 和 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() 还是我还需要什么?我错过了一些东西;-)

【问题讨论】:

    标签: silverlight silverlight-4.0


    【解决方案1】:

    您采取了错误的方法 - 不是尝试将文本从控件的类中到文本块中,而是需要文本块来值从控件的类。您需要做的主要步骤是:

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

    2. 使用 TemplateBinding 绑定表达式将控件模板中 TextBlock 的 Text 属性绑定到依赖项属性。大致如下:

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

    希望这会有所帮助...

    克里斯

    【讨论】:

    • 如果文本已经绑定,我想在堆栈面板中获取文本块的当前值怎么办?
    【解决方案2】:

    您可以在 google 上输入您的问题,并更快地找到答案。

    【讨论】:

    • 你有没有注意到谷歌发现的结果是这个问题? :-)
    • SO 是 Google 的专业版,具有评分系统等。这里的答案质量要高得多。如果 Google 有所有的答案,你还在这里做什么?
    • 亲爱的@ProfK 我从来没有写过谷歌有所有的答案 :) 但是很多问题很容易在那里找到,这就是其中之一。
    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多