Изменить цвет переднего плана ComboBoxItem при наведении ComboBox

1

На данный момент я настраиваю элементы управления WPF. Вот как выглядит пользовательская <Button>.

Изображение 174551

И вот как выглядит <ComboBox> когда мышь над ним.

Изображение 174551

Просто, я хочу, чтобы иметь возможность изменять цвет переднего плана текущего выбранного ComboBoxItem когда весь ComboBox зависает. В этом примере я хотел бы иметь похожий желтый цвет, например, на <Button>.

Проблема заключается в том, что <ComboBox> имеет разные элементы ControlTemplates для компонента ComboBox и кнопки переключения. Я не знаю, как взаимодействовать между этими двумя.

Шаблон для <ComboBox> довольно большой, поэтому я не буду публиковать его здесь. Кроме того, вам не нужно публиковать полный ответ, если не требуется объяснять проблему.

  • 1
    Разве вы не можете просто добавить еще один сеттер в свой триггер?
  • 1
    Как сказал @ Okuma.Scott, просто бросьте как <Setter Property="TextElement.Foreground" Value="Yellow" /> в свой IsHighlighted или любой другой триггер, или вы можете просто прочитать документы
Показать ещё 1 комментарий
Теги:
xaml
wpf
combobox

1 ответ

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

Хорошо, я нашел решение. Вам необходимо изменить стандартные шаблоны ComboBox.

В Visual Studio 2013 вы можете получить шаблон по умолчанию в Designer, щелкнув правой кнопкой мыши на ComboBox → Изменить шаблон → Изменить копию...

В <ControlTemplate x:Key="ComboBoxTemplate" TargetType="{x:Type ComboBox}"> вам нужно добавить следующий триггер:

<ControlTemplate.Triggers>
...
<Trigger Property="IsMouseOver" TargetName="toggleButton" Value="true">
    <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="Yellow" />
</Trigger>
...
</ControlTemplate.Triggers>

Кроме того, примените стиль к ComboBoxItem:

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

Теперь это работает как шарм.

Ещё вопросы

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