2011-08-14 13 views
6

Nie mogę ustawić koloru tła dla wybranego elementu w polu listy. Nie chcę zmieniać kolorów w tym przykładzie. Umieściłem je jako test i działają. Trigger IsSelected uruchamia się, gdy grubość czcionki zostanie pogrubiona, a na pierwszym planie - na czerwono. Ustawienie jasnego koloru pędzla w SteelBlue nie osiąga pożądanego efektu, ponieważ znika, gdy ListBox traci ostrość. Czerwony i pogrubiony utrzymuje się, gdy ListBox traci ostrość i jest tym, czego chcę. Chcę, aby kolor tła zabrał i przytrzymał dla wybranego elementu. W tej chwili tło dla wybranych elementów jest białe i zachowuje się, gdy ListBox traci ostrość. Dziękuję za pomoc, a ja przetestuję proponowaną poprawkę.Ustawianie koloru tła dla wybranych elementów w ListBox

<ListBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" Name="WFEnum" Visibility="Visible" BorderThickness="2" Margin="1" Padding="2,2,7,2" 
      ItemsSource="{Binding Path=SearchItem.SrchWorkFlows}" HorizontalAlignment="Left" 
      PresentationTraceSources.TraceLevel="High" AlternationCount="2" > 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="VerticalContentAlignment" Value="Center" /> 
       <Style.Triggers> 
        <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
         <Setter Property="Background" Value="LightGreen"></Setter> 
        </Trigger> 
        <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
         <Setter Property="Background" Value="LightPink"></Setter> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="True" > 
         <Setter Property="FontWeight" Value="Bold" /> 
         <Setter Property="Background" Value="SteelBlue" /> 
         <Setter Property="Foreground" Value="Red" /> 
        </Trigger> 
       </Style.Triggers> 
       <Style.Resources> 
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
       </Style.Resources> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=Name, Mode=OneWay}" Background="Transparent" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Odpowiedz

14

można określić SelectedItem tło dla ListBox z SystemColors.HighlightBrushKey (focused) i SystemColors.ControlBrushKey (nie koncentruje się)

<Style.Resources> 
    <!-- Background of selected item when focussed --> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" 
        Color="Green"/> 
    <!-- Background of selected item when not focussed --> 
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
        Color="LightGreen" /> 
</Style.Resources> 
+9

Warto nadmienić, że od 1/2015 nie ma to wpływu na zaznaczenie kolorów System.Windows.Controls.ListBox ze standardową kompozycją. Wyzwalacze pracują na pierwszym planie, ale nie w tle. Musisz zapamiętać ListBoxItem. –

10
<ListBox.Resources> 
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">SteelBlue</SolidColorBrush> 
</ListBox.Resources> 

Jeśli chcesz to zastosować nieostry także trzeba zastąpić dodatkowy klucz:

<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}">SteelBlue</SolidColorBrush> 
+0

Musiałem zaakceptować drugi jako składnię jako odrobinę czystszy, ale dałem ci +1 dzięki – Paparazzi

+2

@BalamBalam: "Czyste" jest dyskusyjne, a moja odpowiedź była o siedem minut szybsza, no cóż, dzięki i tak ... –

+1

@ H.B. Przepraszam, naprawdę nie zauważyłem, że odpowiedziałeś prawie tak samo przede mną. Oto +1 i tak –

Powiązane problemy