2011-05-13 156 views
2

在我的應用程序中,我爲TextBlocks定義了以下樣式。如何更改WPF組合框中選定文本的顏色?

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="FontFamily" Value="Arial"/> 
    <Setter Property="FontSize" Value="11"/> 
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/> 
    <Setter Property="Opacity" Value="1.0"/> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="false"> 
      <Setter Property="Opacity" Value="0.40"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

樣式是在我的應用程序的最高級別有意定義的,所以它默認適用於所有TextBlocks。

問題是這種風格打破了ComboBoxes中TextBlocks的行爲。通常,ComboBox中的選定項目的前景色會更改爲白色。但是,應用此樣式時,文本的前景顏色不會更改。

當ComboBox中的TextBlock突出顯示時,如何觸發文本以更改顏色?

回答

1

我解決了這個問題並根據需要放入我的應用程序窗口&頁面中的單獨資源字典中。

這樣可以阻止TextBlock風格影響ComboBox中文字的顏色。最後,爲了實現我想要的所有項目的文本顏色,我用我自己的顏色覆蓋了以下默認系統顏色。

<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" 
       Color="{StaticResource TextColor}"/> 

<SolidColorBrush x:Key="{x:Static SystemColors.WindowTextBrushKey}" 
       Color="{StaticResource TextColor}"/> 
0

您是否曾嘗試向ComboBox.Resources或包含ComboBox的控件添加不同的文本樣式?這將覆蓋您在更高級別設置的樣式。

這樣做的另一種方法是在載入時遍歷ComboBox的可視化樹並刪除樣式。

+0

也許我應該更清楚一點。我確實希望將此樣式應用於ComboBox內的TextBlock。我需要做的是增加這種風格,或者在ComboBox上做一些工作,以便在ComboBox中選擇它們時更改TextBlock項目的顏色。 – Nathanael 2011-05-13 18:48:29

0

您可以根據您的第一個和重置背景屬性添加第二個樣式。

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="Foreground" Value="{StaticResource TextBrush}"/> 
</Style> 

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}" x:Key="ResetBG"> 
    <Setter Property="Foreground" Value="{Binding Control.Background}"/> 
</Style> 

<TextBlock Text="Red"/> 
<TextBlock Text="Default" Style="{StaticResource ResourceKey=ResetBG}"/> 
+0

TextBlocks出現在ComboBox內部,它們在我的標記中沒有顯式聲明。 – Nathanael 2011-05-16 19:26:50

2

如果你只是想改變texblock前景選定的項目(比如紅色),只需添加到您的樣式資源:通過移動方式進行的app.xaml

<Style.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/> 
</Style.Resources> 
+0

我試過使用這個作爲我的一般問題的替代解決方案,即我希望我的應用程序中的所有文本(默認情況下)都是特定的顏色和大小。 它幾乎奏效,但我無法找到控制獨立TextBlocks顏色的系統畫筆。有什麼建議麼? – Nathanael 2011-05-16 19:32:10

+0

如果你想在這裏刷其他刷子,你可以看看這個 - http://msdn.microsoft.com/en-us/library/system.windows.systemcolors.aspx?ppud=4 – 2011-05-16 19:57:32

+0

沒錯。當我正在試驗這個時,我評論了這種風格。我確實爲SystemColors.ControlTextBrushKey設置了一個值,但是這並沒有改變TextBlock中文本的顏色......我對此感到驚訝。 – Nathanael 2011-05-16 20:03:41

相關問題