c#-在不影响ComboBox的情况下为TextBlock应用默认样式

提问

我希望使用Royal主题的应用程序中的所有TextBlock控件都具有默认样式.例如:

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Margin" Value="4"/>        
</Style>

这项功能很好地继承了Royal主题,但不幸的是,它还影响了其他控件(如ComboBox)的模板中使用的TextBlock的样式,我不希望那样.

我已经尝试将样式下调一个级别(例如在Grid.Resources内部),但是没有运气.

有没有办法做到这一点?当然,我不想命名我的样式(使用x:key),因为我不想必须将自定义样式显式地应用于应用程序的每个TextBlock.而且无需创建用于覆盖样式的子类.

有任何想法吗?先感谢您!

附言我已经看过可能相似的问题,但没有答案对我有用.

编辑:

感谢所有的答案.我希望我想念一些可以区分其他控件模板中使用的TextBlock的方法.

最佳答案

通过此排除:

Of course I don’t want to name my style (using x:key) because I don’t
want to apply to each and every TextBlock of my application the custom
style. And without creating subclasses for overwriting the style
there.

你几乎要问不可能的事.您创建的样式将应用于包含样式的字典下方的可视树中的所有TextBlock.

如果要创建例外,则必须以一种或另一种方式指定它们.

显然,您的要求“为所有TextBlock控件具有默认样式”是不正确的.您不希望所有TextBlocks都具有这种样式.

如果希望从该级别开始应用样式,则将样式向下移动一个或多个级别可能是一种解决方案.

除非您能够以某种方式区分它们,否则无法指定您要将样式应用于特定的TextBlock,而不应用于其他文本.