在ControlTemplate中,我想将相同的样式应用于所有TextBlocks

时间:2014-11-22 12:29:09

标签: c# wpf xaml

我有一个类库,我在其中为TextBlock创建了默认样式,它应用于任何使用此类库的应用程序中的每个TextBlock。

问题是我有时需要在其他一些控件(比如功能区或我自己的自定义控件)中排除TextBlocks。文本块不可访问,例如标签项内的文本块。

有没有办法强制wpf在一个控件中为所有TextBlock使用另一种样式?

由于

2 个答案:

答案 0 :(得分:1)

只需将空(或任何其他)样式添加到嵌套在引用资源字典的控件内的TextBlock的任何祖先的资源字典中,其中定义了全局样式。例如,在这种情况下不会应用为TextBlock定义的全局样式(如果资源字典由Button控件的祖先引用):

<Button>
    <Button.Resources>
        <Style TargetType="TextBlock"/>
    </Button.Resources>
    <TextBlock Text="FooBar"/>
<Button>

答案 1 :(得分:1)

确定。事实证明,这是不可能的,请参阅Mike Strobel的答案,以解释原因及其背后的理性。

解决方法是不为TextBlock创建隐式样式,因为它会影响其他TextBlock内的ControlTemplate

对我来说有用的是从TextBlock派生一个课程,比如Label并将我的风格应用到它,然后在我希望TextBlock具有该特定风格的任何地方使用它。

更多“Wpf Natural”处理方法是创建一个带键的样式。