我使用此模板为自定义控件提供了通用样式。
<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 中的边框(位于模板中)也继承此样式(Padding 3 等)
有没有办法让ControlTemplate中的控件不继承这些全局样式?
只是提一下。这是一个通用模板
最佳答案
不确定我的理解是否正确。 做了一些解决办法,因为我有类似的情况,我的所有控件的样式全局指定并自动继承,无需 x:key 。
我必须删除某些控件的样式并为某些控件应用不同的样式。
在这种情况下,我创建了单独的样式(下面例如想要删除样式),因此只需创建空样式并在需要的任何地方和任何控件上使用。
空样式:
<Grid.Resources>
<ResourceDictionary>
<Style x:Key="EmptyStyle"/>
</ResourceDictionary>
</Grid.Resources>
应用于控制:
<TextBlock Text="First Name" Style="{StaticResource EmptyStyle}" />
关于wpf - 防止 ControlTemplate 中的控件继承全局样式 (WPF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11326093/