2014-11-22 65 views
2

我有一个类库,其中为TextBlock创建了默认样式,该样式应用于使用此类库的任何应用程序中的每个TextBlock。在ControlTemplate中,我想将相同样式应用于所有TextBlocks

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

有没有什么办法可以强制wpf在一个控件中为所有TextBlocks使用另一种风格?

由于

+1

不幸的是,我不认为有一个简单的解决方案,检查了这一点http://stackoverflow.com/questions/27057639/wpf-subcontrol-like-textblock-doesnt-inherit-style-from-window-with-模板/ 27060189#27060189(在迈克strobe的非接受的答案中寻找)。 – 2014-11-22 18:38:10

+0

谢谢@KingKing,链接很棒。有趣的是,迈克的回答是从昨天开始的! – Alireza 2014-11-23 08:13:46

回答

1

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

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

我什么工作是从TextBlock派生类,说Label和应用我的风格给它,然后用它的地方我想与该特定风格TextBlock

一个更“Wpf自然”的方式来处理,就是创建一个关键风格。

1

只需添加一个空的(或任何其他)样式嵌套在控制引用资源字典,其中,所述全局样式被定义内的TextBlock的任何祖先的资源字典。例如,对于TextBlock定义的全局样式不会在这种情况下应用(如果资源字典由Button控制的祖先引用):

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

谢谢,这是非常期待的,但在实践中它不起作用。 – Alireza 2014-11-22 13:17:02

+1

那么它确实可以用于为测试此解决方案而创建的简单项目,因此错误必须是特定于您的代码的内容。你能否提供能够解决问题的代码?对于初学者,您如何定义默认样式,以及如何强制应用程序中的所有“TextBlock”使用该样式? – Grx70 2014-11-22 13:42:01

+0

在我的类库中,在主题文件夹中,我有一个名为TextBlockStyles的ResourceDictionary文件,它带有