Как изменить цвет выделения выбранного элемента ListView в UWP (Windows 10)

Я работаю над приложением Windows 10 с помощью С# и XAML. У меня есть ListView, и я хочу изменить цвет HighLight по умолчанию для выбранного элемента. Я видел много примеров кода (например, this), но все они предназначены для WP8 или Win8, я пытался их реализовать, но они не работают для меня.

В общем, у меня возникают проблемы, изменяющие темы управления по умолчанию, потому что я не нахожу полезную документацию. Было бы здорово, если кто-то может помочь мне с цветом подсветки, а также порекомендовать мне хорошую документацию.

Ответы

Ответ 1

На самом деле лучшим способом обнаружения свойств стиля является использование Blend.

Сначала откройте свою страницу в Blend. Затем щелкните правой кнопкой мыши на ListView и выберите

Изменить дополнительные шаблоны > Изменить созданный контейнер элементов (ItemContainerStyle) > Изменить копию.

Дайте ему имя и нажмите ОК.

Теперь вы создали полный встроенный стиль для ListViewItem, и здесь вы можете найти всю информацию об их внешности, анимации и других визуальных поведении.

Вы должны посмотреть на этот кусок кода -

<ListViewItemPresenter CheckBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       ContentMargin="{TemplateBinding Padding}" 
                       CheckMode="Inline" 
                       ContentTransitions="{TemplateBinding ContentTransitions}" 
                       CheckBoxBrush="{ThemeResource SystemControlForegroundBaseMediumHighBrush}" 
                       DragForeground="{ThemeResource ListViewItemDragForegroundThemeBrush}" 
                       DragOpacity="{ThemeResource ListViewItemDragThemeOpacity}" 
                       DragBackground="{ThemeResource ListViewItemDragBackgroundThemeBrush}" 
                       DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}" 
                       FocusBorderBrush="{ThemeResource SystemControlForegroundAltHighBrush}" 
                       FocusSecondaryBorderBrush="{ThemeResource SystemControlForegroundBaseHighBrush}" 
                       HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" 
                       PointerOverForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       PressedBackground="{ThemeResource SystemControlHighlightListMediumBrush}"
                       PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"
                       PointerOverBackground="{ThemeResource SystemControlHighlightListLowBrush}"
                       ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}" 
                       SelectedPressedBackground="{ThemeResource SystemControlHighlightListAccentHighBrush}"
                       SelectionCheckMarkVisualEnabled="True" 
                       SelectedForeground="{ThemeResource SystemControlHighlightAltBaseHighBrush}"
                       SelectedPointerOverBackground="{ThemeResource SystemControlHighlightListAccentMediumBrush}" 
                       SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"
                       VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />

См. строку SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"? Это, где вы можете применить к нему свой собственный цвет. Имейте в виду, что он должен иметь тип Brush вместо Color.

Ответ 2

Если вы не хотите использовать XAML, еще проще (на мой взгляд) изменить эти настройки, используя С#:

Application.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
Application.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);

Таким образом, вы можете реально настроить свои элементы логически.

Ответ 3

Это может быть достигнуто в XAML путем переопределения ресурса.

<ListView ...>
    <ListView.Resources>
        <SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="#FF0000" />
        <SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="#FF0000" />
    </ListView.Resources>
</ListView>

Ответ 4

Продлить на bastecklein Ответ. Вы хотите использовать приложение вместо приложения, чтобы этот метод работал в проекте UWP. Вы можете использовать этот код в своем App.xaml.cs при загрузке исходного фрейма, или вы можете просто установить цвет ресурса на код, расположенный за той страницей, на которую вы хотите повлиять.

App.Current.Resources["SystemControlHighlightListAccentLowBrush"] = new SolidColorBrush(Colors.Red);
App.Current.Resources["SystemControlHighlightListAccentMediumBrush"] = new SolidColorBrush(Colors.Red);