2012-01-27 8 views
2

私はApp.xamlで定義されているデフォルトのTextBlockスタイルを持っていますが、これはComboBoxアイテムのテキストカラーにも影響します。今、メインウィンドウに定義されているコンボボックスのテキストの色を明示的に設定するにはどうすればいいですか?ComboBoxのデフォルトのTextBlockスタイルをオーバーライドします。

を(私が...デフォルトのスタイルを維持したいが、代わりに赤の青、と言う、とコンボボックスのテキストの色を持っていると思います)App.xaml

<Application x:Class="WpfApplication1.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="MainWindow.xaml"> 
<Application.Resources> 
    <Style TargetType="{x:Type TextBlock}"> 
     <Setter Property="Foreground" Value="Red" /> 
    </Style> 
</Application.Resources> 

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow"> 
<Grid> 
    <ComboBox Name="comboBox1" SelectedIndex="0" HorizontalAlignment="Left" VerticalAlignment="Top"> 
     <ComboBoxItem Content = "Item1"/> 
     <ComboBoxItem Content = "Item2"/> 
     <ComboBoxItem Content = "Item3"/> 
    </ComboBox> 
</Grid> 

私が試したの

もの:

  1. 設定Combobox.Foreground
  2. 設定TextElement.Foreground
  3. 設定TextBlock.Foreground
  4. 定義ComboBox.Resourcesに
  5. を別の暗黙のTextBlockのスタイルを定義します。 Grid.Resources内の他の暗黙的なTextBlockスタイル
  6. Window.Resources内に別の暗黙のTextBlockスタイルを定義する

答えて

3

ほとんどの暗黙のTextBlockのスタイルを使用すると、たとえばApplication.Resources

に入れない限り、それはすべての<TextBlock>オブジェクトに適用になりますWindow.Resourcesであなたのスタイルを配置し、コントロールの境界で停止しますが、ない他のコントロール内のテキストにこのようComboBoxまたはButton

としてテンプレート私はWindow.Resourcesに自分のスタイルを移動し、その後、あなたが欲しいものは何でもフォアグラウンドカラー持っているあなたのコンボボックスのアイテムをスタイリングを示唆しています。

<ComboBox.Resources> 
    <Style TargetType="{x:Type ComboBoxItem}"> 
     <Setter Property="Foreground" Value="Blue" /> 
    </Style> 
</ComboBox.Resources> 

あなたはApplication.Resourcesでそれを維持したい場合は、私はあなたがx:StaticブラシキーがTextBlock.Text色を設定するために使用されているものを追跡し、あなたのComboBox.Resources

+0

私は、別のTextBlockスタイルをコンボボックスリソースに追加しようとしました。残念ながら、それは何の効果もありませんでした。 –

+0

私はすでに試したことをいくつか含めるように質問を編集しました –

+0

@ErenErsonmez私の編集した答えを見てください。暗黙のスタイルがApp.xamlにある場合、あなたは 'Application.Resources'ではなく、' Window.Resources'であなたのスタイルを持っていたことに気付きませんでした。 – Rachel

1

にトリガを使用する必要があることを上書きする必要がある疑いがありますComboBoxItemの

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Style.Triggers> 
     <Trigger Property="ComboBoxItem.IsMouseOver" Value="true"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Trigger> 

     <Trigger Property="ComboBoxItem.IsMouseOver" Value="false"> 
      <Setter Property="Foreground" Value="Blue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

そして、あなたは

その後、静的な、それを維持したい場合3210
+1

これは動作しません。 –

+0

次に、x:Keyを使用し、デフォルトのコンボボックステンプレートをオーバーライドし、スタイルでテンプレートを適用し、コンボボックスをスタイルに適用する必要があります – MyKuLLSKI

関連する問題