Установить цвет фона для выбранных элементов в ListBox - PullRequest
7 голосов
/ 15 августа 2011

Я не могу установить цвет фона для выбранного элемента в списке. Я не хочу чередующихся цветов в этом примере. Я поставил их в качестве теста, и они работают. Триггер IsSelected срабатывает, когда начертание шрифта становится жирным, а передний план становится красным. Установка выделенной цветной кисти на SteelBlue не дает желаемого эффекта, поскольку она исчезает, когда ListBox теряет фокус. Красные и жирные буквы сохраняются, когда ListBox теряет фокус и это то, что я хочу. Я хочу, чтобы цвет фона был выбран и удержан для выбранного элемента. Прямо сейчас фон для выбранных элементов является белым и удерживается, когда 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>

Ответы [ 2 ]

14 голосов
/ 15 августа 2011

Вы указываете фон SelectedItem для ListBox с помощью SystemColors.HighlightBrushKey (сфокусированный) и SystemColors.ControlBrushKey (не сфокусированный)

<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> 
10 голосов
/ 15 августа 2011
<ListBox.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}">SteelBlue</SolidColorBrush>
</ListBox.Resources>

Если вы хотите, чтобы это также применялось не в фокусе, вам необходимо переопределить дополнительный ключ:

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