2011-03-11 134 views
2

我有一個從TextBox派生的自定義控件。而且我無法找到覆蓋默認文本值的方法。所以,簡而言之 - 我希望MyTextBox在其中具有一些特定的默認文本。覆蓋TextBox.TextProperty的默認值

代碼:

public class MyTextBox : TextBox 
    { 
     static MyTextBox() 
     { 
      TextBox.TextProperty.OverrideMetadata(
       typeof(MyTextBox), 
       new FrameworkPropertyMetadata("DEFAULT TEXT", OnTextChanged)); 
     } 

     private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
     } 
    } 

的問題是,房地產(奇怪)包含「默認文本」的價值,但它不會在用戶界面中顯示(文本框爲空)。

我在做什麼錯?

+0

爲什麼你將你的構造函數設置爲'static'? – 2011-03-11 11:23:41

+0

你是否僅僅爲了具有不同的文本屬性默認值而繼承類? – 2011-03-11 11:34:21

+0

是不是夠了?只需添加一個觸發器,以確保一個按鈕或某些東西被禁用,直到文本更改。 – coldandtired 2011-03-11 13:00:43

回答

3

TextBox使用內部類來提供其大部分功能。這個類與RichTextBox共享。我相信TextBox假定構造時Text將是空的,所以UI不會更新。

有一點需要記住的是,您已經有效地短路了TextBox.OnTextPropertyChanged方法。如果您想重寫PropertyChangedCallback,那麼您可能需要手動調用TextBox版本以確保一切按預期工作。

您可以使用TextProperty獲取基類的PropertyChangedCallback。 GetMetadata(typeof(TextBox)) .PropertyChangedCallback。

您可能能夠在實例構造函數中調用TextBox的PropertyChangedCallback來強制更新UI。否則,您需要直接設置文本。

+0

謝謝!只要我開始在實例構造函數中調用PropertyChangedCallback,並在回調函數中開始工作! :) – Jefim 2011-03-11 13:15:10