2

我有这个模板的自定义控件的通用样式。

<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 中的边框(位于模板中)也继承了这种样式(填充 3 等)
有没有办法说 ControlTemplate 中的控件不继承这些全局样式?顺便提一下。这是一个通用模板

4

2 回答 2

2

不确定我是否理解正确。做了一些工作,因为我有类似的情况,我的所有控件的样式都是全局指定的,并且在没有 x:key 的情况下自动继承。

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

在那种情况下,我创建了单独的样式(例如下面要删除样式),所以只创建了 Empty 样式并在需要的地方和任何地方使用它。

空样式:

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

适用于控制:

<TextBlock Text="First Name" Style="{StaticResource EmptyStyle}" />
于 2014-09-11T14:16:22.777 回答
0

您可以使用 ax:Key 将您的样式放入资源字典中,我一直这样做,并且仅当我在控件上指定键时才应用我的样式。

于 2012-07-04T10:56:38.793 回答