2017-10-18 6 views
0

J'utilise AutoCompleteBox de WPFToolkit et j'ai besoin de changer la couleur d'arrière-plan de l'élément sélectionné, mais je ne peux pas le faire. Je peux changer le style de police, la taille de la police, mais pas l'arrière-plan.Configuration de AutoCompleteBox ListBox SelectedItem Couleur d'arrière-plan

J'ai essayé de nombreuses solutions de SO, mais aucune d'elles n'a fonctionné. Ce que j'ai essayé jusqu'à présent:

Change background color for selected ListBox item

Changing WPF Listbox SelectedItem text color and highlight/background Color using C#

L'utilisation d'un déclencheur pour changer l'arrière-plan de SelectedItem dynamiquement

<Style x:Key="myLBStyle" TargetType="ListBoxItem"> 
     <Setter Property="Background" Value="IndianRed" /> 
     <Setter Property="Foreground" Value="WhiteSmoke" /> 
     <Setter Property="Margin" Value="0" /> 
     <Setter Property="FontSize" Value="22" /> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
       <Setter Property="Background" Value="Chartreuse" /> 
       <Setter Property="FontStyle" Value="Italic" /> 
       <Setter Property="Foreground" Value="Chartreuse" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

<local:FocusableAutoCompleteBox x:Name="ACBox" Margin="10,32,10,0" 
    Grid.Row="2" FontSize="27" Grid.ColumnSpan="4" Foreground="#FF333333" 
    Background="#FF1700FF" BorderThickness="2" TextChanged="_ACBox_TextChanged" 
    KeyDown="ACBox_KeyDown" Focusable="True" MinimumPopulateDelay="100" 
    MinimumPrefixLength="1" ItemContainerStyle="{DynamicResource ResourceKey=myLBStyle}"> 

J'ai aussi essayé remplaçant les couleurs du système:

 <Style x:Key="myLBStyle" TargetType="ListBoxItem"> 
     <Style.Resources> 
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" /> 
      <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" /> 
     </Style.Resources> 
     <Setter Property="Background" Value="IndianRed" /> 
     <Setter Property="Foreground" Value="WhiteSmoke" /> 
     <Setter Property="Margin" Value="0" /> 
     <Setter Property="FontSize" Value="22" /> 
    </Style> 

Je peux suc Définissez d'autres propriétés avec le déclencheur. Je peux définir la police selecteditem en italique, en gras, plus grande, plus petite, mais je ne peux pas changer la couleur d'arrière-plan de l'élément sélectionné.

Répondre

0
<Style x:Key="myLBStyle" TargetType="ListBoxItem"> 
    <Setter Property="Background" Value="IndianRed" /> 
    <Setter Property="Foreground" Value="WhiteSmoke" /> 
    <Setter Property="Margin" Value="0" /> 
    <Setter Property="FontSize" Value="22" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <Grid Background="{TemplateBinding Background}"> 
        <ContentPresenter></ContentPresenter> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="true"> 
      <Setter Property="Background" Value="Chartreuse" /> 
      <Setter Property="FontStyle" Value="Italic" /> 
      <Setter Property="Foreground" Value="Chartreuse" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Merci beaucoup. Ça a marché. J'aimerais cependant savoir _why_ ça marche? Je comprends que j'ai ajouté le ListBox sur une grille, en définissant l'arrière-plan de la grille. Mais pourquoi ne pourrais-je pas changer la couleur sélectionnée de ListBox elle-même? –

+0

La couleur de chaque élément est définie dans 'ListBoxItem', qui n'héritera pas de la couleur de son contrôle parent. – Iron

+0

Je vois. C'est comme si le contrôle avait un style ListBoxItem pour le ListBox global et un autre ListBoxItem, son enfant, qui contient les éléments individuels. –