Переопределить стиль TextBlock по умолчанию в ComboBox

2

У меня есть стиль 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>

Что я пробовал:

  • Установить Combobox.Foreground
  • Установить TextElement.Foreground
  • Установить TextBlock.Foreground
  • Определить другой неявный стиль TextBlock в ComboBox.Resources
  • Определить другой неявный стиль TextBlock в Grid.Resources
  • Определить другой неявный стиль TextBlock в Window.Resources
Теги:
wpf

2 ответа

3
Лучший ответ

Большинство неявных стилей 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

  • 0
    Я попытался добавить еще один стиль TextBlock в ресурсах combobox. к сожалению, это не имело никакого эффекта.
  • 0
    Я отредактировал вопрос, чтобы включить некоторые вещи, которые я уже пробовал
Показать ещё 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>
  • 1
    это не работает, когда неявный стиль находится в App.xaml.
  • 0
    Затем вам нужно будет использовать ключ x: Key, переопределить шаблон ComboBox по умолчанию, применить шаблон в стиле и применить стиль ComboBox.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню