Wpf 自定义控件不继承父控件';s风格

Wpf 自定义控件不继承父控件';s风格,wpf,xaml,.net-4.0,custom-controls,Wpf,Xaml,.net 4.0,Custom Controls,我试图在WPF应用程序中的各个元素之间保持统一的外观,同时我想创建一个修改后的TextBox。但是,执行此操作时,我在应用程序级别为TextBox定义的样式不会应用于我创建的类,即使为自定义控件创建的样式使用的是BasedOn属性 是不是我遗漏了什么东西,导致这一切与我预期的不同 我在VS2010的一个全新WPF项目中使用以下设置复制了该问题: C#代码: Themes\Generic.XAML中的XAML: <Style TargetType="{x:Type local:CustomT

我试图在WPF应用程序中的各个元素之间保持统一的外观,同时我想创建一个修改后的
TextBox
。但是,执行此操作时,我在应用程序级别为
TextBox
定义的样式不会应用于我创建的类,即使为自定义控件创建的样式使用的是
BasedOn
属性

是不是我遗漏了什么东西,导致这一切与我预期的不同

我在VS2010的一个全新WPF项目中使用以下设置复制了该问题:

C#代码:

Themes\Generic.XAML中的XAML

<Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}"/>
<Application.Resources>
    <Style TargetType="TextBox">
        <Setter Property="Background" Value="Red"/>
    </Style>
</Application.Resources>
但是,在designer中,当我运行应用程序时,
CustomTextBox
会使用文本框的默认样式,而不是红色背景,即使建议我的派生类应该使用此样式

有几种方法可以扩展或继承WPF中的样式。样式可以通过此属性基于其他样式。使用此特性时,新样式将继承未在新样式中显式重新定义的原始样式的值

注意:如果使用TargetType特性创建样式,并将其基于另一个也定义了TargetType特性的样式,则派生样式的目标类型必须与基础样式的类型相同或派生自基础样式的类型


简短回答:您的风格基于静态资源

<Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}"/>
<Style TargetType="TextBox">
    <Setter Property="Background" Value="Red"/>
</Style>

执行此操作时,您没有更改StaticResource

<Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}"/>
<Style TargetType="TextBox">
    <Setter Property="Background" Value="Red"/>
</Style>

因此,CustomTextBox不应继承红色背景