我有一個類庫,其中爲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