阻止ControlTemplate中的控件继承全局样式(WPF)

时间:2012-07-04 09:19:35

标签: wpf styles custom-controls controltemplate inheritance

对于使用此模板的自定义控件,我有这种通用样式。

<Style TargetType="{x:Type local:MyType}">        
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:MyType}">                    
                    <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <local:MyControl />
                    </Border>
                    ...

如果在这个样式全局设置的项目中使用此控件:

<Style  TargetType="{x:Type Border}">
    <Setter Property="Padding" Value="3" />
    <Setter Property="VerticalAlignment" Value="Top" />
</Style>

但是MyControl是一个普通的UserControl,包含: ...

<Border .. />

然后UserControl中的Border(驻留在Template中)也继承了这个样式(Padding 3等)
是否有任何方法可以说ControlTemplate中的控件不会阻止这些全局样式? 提一下。这是一个通用模板

2 个答案:

答案 0 :(得分:1)

不确定我是否理解正确。 有些解决方法,因为我有类似的情况,我的所有控件的样式全局指定并自动继承而没有x:key。

我必须删除某些控件的样式,并为某些控件应用不同的样式。

在那种情况下,我创建了单独的样式(例如,想要删除样式),因此只需创建空样式并在任何地方使用,并且可以控制它。

空格:

<Grid.Resources>
    <ResourceDictionary>
        <Style x:Key="EmptyStyle"/>
    </ResourceDictionary>
</Grid.Resources>

申请控制权:

<TextBlock Text="First Name" Style="{StaticResource EmptyStyle}" />

答案 1 :(得分:0)

你可以将你的Style放在带有x:Key的资源字典中,我总是这样做,只有在我指定控件上的键时才应用我的样式。