2011-03-21 48 views
2

我已經定義了鍵入的文本塊樣式(而不是有一個鍵值),以便它適用於所有文本塊。爲WPF中的contentpresenter改寫輸入的文本塊樣式

<Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontFamily" Value="MyFancyFont"/> 
     <Setter Property="FontSize" Value="13.333" /> 
     <Setter Property="Foreground" Value="Gray" /> 
</Style> 

現在我有一個,比如說,樹型視圖,我想它時,它的選擇顯示爲藍色背景和白色前景對黑暗的背景。

<!--part of the treeviewitem template--> 
<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="Background" Value="Black"/> 
</Trigger> 

定義的文本塊本地風格選擇的TreeView項時的情況不工作,作爲項目的文本塊仍然拿起類型樣式。

有沒有一種很好的方法來做到這一點,同時仍然保持文本塊樣式爲「Typed」?

回答

3

this問題可能會對您有所幫助。它顯示如何覆蓋隱式樣式。

好吧,我明白你的問題,我真的沒有直接的解決方案,但不管怎樣,我會告訴你我是如何處理這樣的事情:

你知道,這隱含樣式作用域,這意味着:

<Grid> 
     <Grid.Resources> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="FontFamily" Value="MyFancyFont"/> 
      </Style> 
     </Grid.Resources> 
     <TextBlock>textblock with MyFancyFont</TextBlock>   
    </Grid> 
    <TextBlock>textblock with normal font</TextBlock> 

我通常嘗試在我的主窗口的資源中避免TextBlock的這種隱式樣式。相反,我可能會做:

<Application bunch="ofStuff"> 
    <Application.Resources> 
     <Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStandardStyle"> 
      <Setter Property="FontFamily" Value="MyFancyFont"/> 
     </Style> 
    </Application.Resources> 
</Application> 

然後在分區那裏這種風格可以是隱式的,不會造成任何傷害,我會寫:

<Grid> 
     <Grid.Resources> 
      <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStandardStyle}"/>    
     </Grid.Resources> 
     <TextBlock>textblock with MyFancyFont</TextBlock>   
    </Grid> 

這樣我可以範圍的事情,我怎麼想。也許這種方法可以讓你跳過樹視圖的隱式樣式,這樣你就可以使用觸發器!

+0

感謝您的鏈接。我試圖做它說的,但它似乎不工作。在我的情況下,我不確定treeviewitem是否爲類型字符串生成模板。我覺得默認的模板都有一個圖標,內容主持人和網格內itemspresenter ... – mobileTofu 2011-03-21 20:22:18

+0

所以基本上,如果我直接設置標題是這樣的: <樹型視圖標題=「收件箱」 /> 在後的作品中描述的的DataTemplate 。當我指定的東西比頭一個字符串別的,像圖標加上一些文字圖像這是行不通的。如果該項目具有子項目(在標題字符串旁邊有一個「加號」),它也不起作用。 – mobileTofu 2011-03-22 01:27:53

+0

@mobileTofu請看我的更新,希望有任何幫助! – 2011-03-22 11:14:25