2010-10-09 27 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