我有一个类库,其中为TextBlock创建了默认样式,该样式应用于使用此类库的任何应用程序中的每个TextBlock。在ControlTemplate中,我想将相同样式应用于所有TextBlocks
问题是,我有时需要排除某些其他控件(例如,功能区或我自己的自定义控件)中的TextBlocks。文本块不可访问,例如标签项目内的文本块。
有没有什么办法可以强制wpf在一个控件中为所有TextBlocks使用另一种风格?
由于
我有一个类库,其中为TextBlock创建了默认样式,该样式应用于使用此类库的任何应用程序中的每个TextBlock。在ControlTemplate中,我想将相同样式应用于所有TextBlocks
问题是,我有时需要排除某些其他控件(例如,功能区或我自己的自定义控件)中的TextBlocks。文本块不可访问,例如标签项目内的文本块。
有没有什么办法可以强制wpf在一个控件中为所有TextBlocks使用另一种风格?
由于
确定。事实证明,这是不可能的,请参阅Mike Strobel的答案,以解释其原因和理由。
解决方法是不要为TextBlock
创建隐式样式,因为它会影响其他ControlTemplate
s中的TextBlock
s。
我什么工作是从TextBlock
派生类,说Label
和应用我的风格给它,然后用它的地方我想与该特定风格TextBlock
。
一个更“Wpf自然”的方式来处理,就是创建一个关键风格。
只需添加一个空的(或任何其他)样式嵌套在控制引用资源字典,其中,所述全局样式被定义内的TextBlock
的任何祖先的资源字典。例如,对于TextBlock
定义的全局样式不会在这种情况下应用(如果资源字典由Button
控制的祖先引用):
<Button>
<Button.Resources>
<Style TargetType="TextBlock"/>
</Button.Resources>
<TextBlock Text="FooBar"/>
<Button>
不幸的是,我不认为有一个简单的解决方案,检查了这一点http://stackoverflow.com/questions/27057639/wpf-subcontrol-like-textblock-doesnt-inherit-style-from-window-with-模板/ 27060189#27060189(在迈克strobe的非接受的答案中寻找)。 – 2014-11-22 18:38:10
谢谢@KingKing,链接很棒。有趣的是,迈克的回答是从昨天开始的! – Alireza 2014-11-23 08:13:46