Próbuję ustawić kolor tła wybranego obiektu ListBoxItem na biały zamiast koloru systemu. Przeczytałem, co mogłem znaleźć na SO i śledziłem lub uważałem, że postępowałem zgodnie z zaleceniami tam (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 i innych).Ustawianie koloru tła lub WPF (4.0) ListBox - Windows 8
Wszystko wydaje się rozwiązać problem, ustawiając HighlightBrush i ControlBrush na Transparent dla wybranego elementu. Mam następujące XAML i ustawia poprawnie kolor czcionki, ale backgroound jest domyślnym przezroczystym niebieskim, niezależnie od ustawień pędzla. Wciąż jestem trochę noobem WPF, więc muszę tu pominąć coś prostego.
<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>
Byłbym wdzięczny za wszelkie kłucie w dobrym kierunku.
EDIT:
Po przeczytaniu pierwszej odpowiedzi, że pracował dla nich z niewielką zmianą, wziąłem wniosku, że rozwijają się w moim systemie Windows 8 maszynie i wykonywane go w Windows 7 VM i działało zgodnie z oczekiwaniami. Jakieś pomysły na to, co należy zmienić, aby to działało na komputerze z Windows 8, a także Windows 7?
Dziękuję bardzo. Pozwólcie, że przeprowadzę badania nad szablonami, aby je zastąpić i upewnić się, że to działa, jak jestem pewien, że to zrobię, i oznaczy je jako odpowiedzi. –
@RobGoodwin Twoje powitanie. Możesz pobrać próbkę, którą umieściłem dla twojego pytania z https://www.dropbox.com/s/4ni0dbcgift_h8n/ListBoxSelectionWin8.rar, aby zobaczyć zastąpienie stylu. – Viv
To zadziałało. Dziękuję za poświęcenie czasu na opublikowanie próbki. Pozwoliło mi to szybko przetestować system Windows 7 i 8 i daje mi trochę więcej źródeł do nauki o stylowaniu elementów sterujących WPF. –