我在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>
我尝试过的事情:
答案 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>