2012-04-30 118 views
4

我们正在编写TextBox的自定义子类,我们只需要更改样式的一些基本部分。现在我们知道,当你继承Control,通常你应该改变这样的元数据...如何基于默认控件的样式创建样式?

public class EnhancedTextBox : TextBox 
{ 
    static EnhancedTextBox() 
    { 
     // Commenting this line out lets this use the default TextBox style. 
     DefaultStyleKeyProperty.OverrideMetadata(
      typeof(EnhancedTextBox), 
      new FrameworkPropertyMetadata(typeof(EnhancedTextBox))); 
    } 
} 

这改变了用于该子类类型为类型本身的关键,这意味着它不再变默认的TextBox样式。没有biggie ...我们只是评论这一行,它再次工作,因为键仍然设置为TextBox直接使用的值。

但是,我们想知道,如果我们没有想改变风格的几件事情,而不是整个的风格,我们可以简单地创建新的样式,并设置其属性BasedOn ...但做我们在那里设置?我们不希望手动拉出XAML并创建一个新样式,给它一个键,然后使用StaticResource,但是我们还没有找到我们可以在那里设置的内容来说'这是基于TextBox样式。

我希望它的东西很简单,但再次,我们还没有找到它。谁能帮忙?

回答

5

就这样......我找到了。男人,踢我自己,这是显而易见的,我错过了!

<Style TargetType="{x:Type local:EnhancedTextBox}" 
    BasedOn="{StaticResource {x:Type TextBox}}"> 

    .... 

</Style> 

在这里找到... WPF style basedon current