Я пытаюсь установить цвет фона выбранного объекта ListBoxItect как белый, а не системный. Я прочитал то, что мог найти здесь на SO, и следил за ними или считал, что он выполнил рекомендации там (Change background color for selected ListBox item, WPF How to change the listbox selected item text color when the list box loses focus, Change selected and unfocused Listbox style to not be grayed out и другие).Настройка цвета фона или WPF (4.0) ListBox - Windows 8
Все, кажется, решают проблему, установив HighlightBrush и ControlBrush в Прозрачный для выбранного элемента. У меня есть следующий XAML, и он правильно устанавливает цвет шрифта, но backgroound является прозрачным синим цветом по умолчанию, независимо от настроек кисти. Я все еще немного WPF noob, поэтому мне, должно быть, не хватает чего-то простого здесь.
<ListBox Width="Auto" Height="Auto" Grid.Column="0" BorderThickness="0" Background="#FFF3F3F3" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ListBox.ItemsSource>
<x:Array Type="{x:Type sys:String}">
<sys:String>String 1</sys:String>
<sys:String>String 2</sys:String>
<sys:String>String 3</sys:String>
<sys:String>String 4</sys:String>
</x:Array>
</ListBox.ItemsSource>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
</Style.Resources>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="FontSize" Value="16"/>
<Setter Property="Foreground" Value="#999999"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="White" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" HorizontalAlignment="Right" Margin="0,0,8,0" Background="Transparent"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я бы по достоинству оценил любые подталкивания в правильном направлении.
EDIT:
После прочтения первого ответа, что он работал на них с небольшим изменением, я взял заявление, что я развивающийся на моем Windows 8 машины и выполнил его в Windows 7 VM и он работал, как ожидалось. Любые идеи о том, что нужно изменить, чтобы заставить это работать на машине Windows 8, а также на Windows 7?
Большое спасибо. Позвольте мне сделать некоторые исследования по поводу получения шаблонов, чтобы переопределить их и убедиться, что он работает, как я уверен, и будет отмечен как ответ. –
@RobGoodwin Ваш прием. Вы можете загрузить образец, который я собрал для вашего вопроса, с https://www.dropbox.com/s/4ni0dbcgzji5h8n/ListBoxSelectionWin8.rar, чтобы увидеть переопределение стиля. – Viv
Это сработало. Спасибо, что нашли время, чтобы опубликовать образец. Это позволило мне быстро протестировать Windows 7 и 8. И это дает мне еще несколько источников для изучения стилей элементов управления WPF. –