На данный момент я настраиваю элементы управления WPF. Вот как выглядит пользовательская <Button>
.
И вот как выглядит <ComboBox>
когда мышь над ним.
Просто, я хочу, чтобы иметь возможность изменять цвет переднего плана текущего выбранного ComboBoxItem
когда весь ComboBox зависает. В этом примере я хотел бы иметь похожий желтый цвет, например, на <Button>
.
Проблема заключается в том, что <ComboBox>
имеет разные элементы ControlTemplates для компонента ComboBox и кнопки переключения. Я не знаю, как взаимодействовать между этими двумя.
Шаблон для <ComboBox>
довольно большой, поэтому я не буду публиковать его здесь. Кроме того, вам не нужно публиковать полный ответ, если не требуется объяснять проблему.
Хорошо, я нашел решение. Вам необходимо изменить стандартные шаблоны 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>
Теперь это работает как шарм.
<Setter Property="TextElement.Foreground" Value="Yellow" />
в свой IsHighlighted или любой другой триггер, или вы можете просто прочитать документы