2010-05-03 67 views
0

我想從System.Windows.Controls.TextBox派生並提供此功能。WPF擴展文本框設計問題

IsEnabledProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(
      new PropertyChangedCallback(delegate(DependencyObject o, DependencyPropertyChangedEventArgs e) 
      { 
       MyTextBox tb = o as MyTextBox; 

       if (tb != null && !tb.IsEnabled) 
       { 
        tb.SetValue(TextProperty, null); 
        tb.OnLostFocus(new RoutedEventArgs(LostFocusEvent, typeof(MyTextBox))); 
       } 
      } 
      ))); 

的問題是,如果我寫了一個自定義控制,什麼都不會使用它時所顯示的,但我不想寫我的自定義模板。我想用原來的那個。

請問您會怎麼做?

回答

2

檢查,看看你的控制覆蓋DefaultStyleKeyProperty

DefaultStyleKeyProperty.OverrideMetadata 

如果是這樣的話,它會想到什麼地方能找到一種風格。刪除重寫,你應該看到正常的TextBox行爲!

如果沒有,你可以隨時立足新的文本框風格在舊的風格,像這樣:

<Style TargetType="{x:Type Your:YourTextBox}" BasedOn="{StaticResource {x:Type TextBox}}" /> 

其放置在一個ResourceDictionary中的某個地方,它應該工作以及!

希望這會有所幫助!

+0

是的,你說得對,我沒有發現它的地方,覆蓋模板的類。謝謝 ! – 2010-05-03 15:31:37

+0

不客氣;) – Arcturus 2010-05-04 07:37:16

0

這裏有一個更簡單的選項。只需使用一個DataTrigger來設置文本框的文本爲空(或空)時TextBox.IsEnabled是假的:

<Style TargetType="TextBox"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=IsEnabled}" Value="False"> 
      <Setter Property="Text" Value="" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style>