在ComboBox中覆盖默认的TextBlock样式

时间:2012-01-27 14:35:47

标签: c# wpf

我在App.xaml中定义了一个默认的TextBlock样式,它似乎也会影响ComboBox项目的文本颜色。现在,如何显式设置主窗口中定义的ComboBox的文本颜色? (我想保留默认样式,但是将组合框文本颜色设为蓝色而不是红色......)

的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样式
  6. 在Grid.Resources中定义另一个隐式TextBlock样式
  7. 在Window.Resources中定义另一个隐式TextBlock样式

2 个答案:

答案 0 :(得分:4)

大多数隐式TextBlock样式将停在控件边界,除非您将它们放在Application.Resources

例如,将您的样式放在Window.Resources中会使其适用于所有<TextBlock>个对象,但不适用于其他控制模板中的文本,例如ComboBox或{{1} }

我建议将您的样式移动到Button,然后将您的ComboBox项目设置样式以获得您想要的任何前景色。

Window.Resources

如果您想将其保留在<ComboBox.Resources> <Style TargetType="{x:Type ComboBoxItem}"> <Setter Property="Foreground" Value="Blue" /> </Style> </ComboBox.Resources> 中,那么我怀疑您需要追踪Application.Resources刷键用于设置x:Static颜色并覆盖TextBlock.Text颜色1}}

答案 1 :(得分: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>

如果你想保持静止,那么

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