У меня есть стиль TextBlock по умолчанию, определенный в App.xaml, который также влияет на цвет текста элементов 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>
Что я пробовал:
Большинство неявных стилей TextBlock останавливаются на границах управления, если вы не поместите их в Application.Resources
Например, размещение вашего стиля в Window.Resources
приведет к его применению ко всем объектам <TextBlock>
, но не к тексту внутри других шаблонов управления, таких как ComboBox
или Button
Я бы предложил переместить ваш стиль в Window.Resources
, а затем стилизовать ваши элементы ComboBox, чтобы иметь нужный цвет переднего плана.
<ComboBox.Resources>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Foreground" Value="Blue" />
</Style>
</ComboBox.Resources>
Если вы хотите сохранить его в Application.Resources
, то я подозреваю, что вам нужно отследить, какая клавиша x:Static
кисти используется для установки цвета TextBlock.Text
и перезаписывает ее в ComboBox.Resources
Вы должны использовать триггеры на 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>