Я работаю над приложением WPF / C #.Частью этого приложения является WPF ListView, который поддерживает навигацию с помощью мыши и клавиатуры.Как я могу заставить это работать с пользовательскими цветами фона для отображения этого, и элемент списка активен / выбран?Я хотел бы получить решение, основанное на XAML с минимальным C #.
Я попытался сделать «ручную» стилизацию из кода позади, добавив сеттеры к стилю элемента.Кажется, что эта стратегия все портит.В итоге я получаю только стиль WPF по умолчанию. Я много искал в Интернете и переполнял стек, но не смог найти ничего особенного в стилизации списка WPF с помощью навигации по клавиатуре
XAML
<Window.Resources>
<!-- This styling does not work. Should it be changed? -->
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Brown"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<ListView x:Name="listView"
PreviewKeyDown="listView_PreviewKeyDown"
SelectionChanged="listView_SelectionChanged">
<ListViewItem>A</ListViewItem>
<ListViewItem>B</ListViewItem>
<ListViewItem>C</ListViewItem>
</ListView>
</Grid>
C #
public MainWindow()
{
InitializeComponent();
KeyboardNavigation.SetTabNavigation(listView, KeyboardNavigationMode.Cycle);
}
public void listView_PreviewKeyDown(object sender, KeyEventArgs e)
{
for (int i = 0; i < 3; i++)
{
var item = GetListViewItemOnIndex(listView, i);
if (item.IsFocused) { /* Set selected style? */ }
else { /* Set transparent style? */ }
}
}
private void listView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
for (int i = 0; i < 3; i++)
{
var item = GetListViewItemOnIndex(listView, i);
if (item.IsFocused) { /* Set selected style? */ }
else { /* Set transparent style? */ }
}
}
private ListViewItem GetListViewItemOnIndex(ListView listView, int index)
{
return listView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem;
}