Как я могу сделать ListView с пользовательским цветом с помощью навигации мыши и клавиатуры в WPF? - PullRequest
0 голосов
/ 31 января 2019

Я работаю над приложением 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...