Search code examples
c#wpfcomboboxitemcontainerstyle

WPF How To Hide ComboBoxItem BorderBrush On MouseOver? (the blue selection rectangle)


I want to display an Imagebased Combobox in WPF. It works with some templating but I don't figure out how to get rid of the blueish mousehover rectangle. See the light blue box:

enter image description here

OK I found the solution, the question is solved now See the solution down here:

The Solution:

    <ComboBox x:Name="comboBox"
        Width="158"
              Height="44"
              Background="Transparent"
              BorderBrush="#551B2830"
              Foreground="Black">
        <ComboBoxItem TextBlock.TextAlignment="Center">Mousehover me</ComboBoxItem>
        <ComboBoxItem TextBlock.TextAlignment="Center">To see the bad </ComboBoxItem>
        <ComboBoxItem TextBlock.TextAlignment="Center">blue rectangle</ComboBoxItem>
        <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="BorderBrush" Value="Transparent" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="Template">
                    <Setter.Value>
                        <!--This Does the Magic-->
                        <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                            <Border x:Name="Bd"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    Padding="{TemplateBinding Padding}"
                                    SnapsToDevicePixels="true">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                  SnapsToDevicePixels="True" />
                            </Border>

                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ComboBox.ItemContainerStyle>
    </ComboBox>

</Grid>

Solution

  • Ok found out how to do it .. I can add a template for the comboboxItem without Border or with Invisible Border. I also updated the question with the solution.

    Edit: And here also to mark it as answered..

     <ComboBox x:Name="comboBox"
        Width="158"
              Height="44"
              Background="Transparent"
              BorderBrush="#551B2830"
              Foreground="Black">
        <ComboBoxItem TextBlock.TextAlignment="Center">Mousehover me</ComboBoxItem>
        <ComboBoxItem TextBlock.TextAlignment="Center">To see the bad </ComboBoxItem>
        <ComboBoxItem TextBlock.TextAlignment="Center">blue rectangle</ComboBoxItem>
        <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="BorderBrush" Value="Transparent" />
                <Setter Property="BorderThickness" Value="0" />
                <Setter Property="Template">
                    <Setter.Value>
                        <!--This Does the Magic-->
                        <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                            <Border x:Name="Bd"
                                    BorderBrush="{TemplateBinding BorderBrush}"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    Padding="{TemplateBinding Padding}"
                                    SnapsToDevicePixels="true">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                  SnapsToDevicePixels="True" />
                            </Border>
    
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ComboBox.ItemContainerStyle>
    </ComboBox>