Search code examples
wpfcomboboxbackgroundhighlighting

Combobox Mouseover


I would like to change the background (mouseover) color of my combobox when i move with a mouse over it.

I have read many post on stackoverflow and have tried a code like this:

<ComboBox.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
</ComboBox.Resources>

and thats the result:

enter image description here

But that's not what I wanted. I want to change this background:

enter image description here

How can I do that?


Solution

  • Naive Solution: Just add brush to the resources and reference it from the Background property (via StaticResource binding) of the ComboBox:

    <Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <SolidColorBrush x:Key="BackgroundColorKey" Color="Red"/>
        <Style TargetType="{x:Type ComboBox}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="{StaticResource BackgroundColorKey}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <ComboBox  Height="25"/>
    </Grid>
    

    Problem: After item is selected the background color is reset back to the default color. The only solution to fix this is to override the default template of the combobox.

    Fix: Modify default ComboBox template. ComboBox default template is present on msdn. Here is the link - http://msdn.microsoft.com/en-us/library/ms752094(v=vs.100).aspx. See "ComboBox ControlTemplate Example" section.

    Related links:

    MouseOver highlighting style returning to default after a second (Caused by Aero?)

    http://social.msdn.microsoft.com/Forums/en/wpf/thread/a18891e9-8879-4819-9679-247341782f60