2010-05-03 66 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>