2014-11-22 66 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文件,它帶有