2015-08-30 11 views
18

Sto lavorando a un'applicazione Windows 10 utilizzando C# e XAML. Ho una ListView e voglio cambiare il colore HighLight predefinito di un oggetto selezionato. Stavo vedendo molti esempi di codice (come this) ma tutti sono progettati per WP8 o Win8, stavo cercando di implementarli ma non funzionano per me.Come modificare il colore di evidenziazione della voce ListView selezionata in UWP (Windows 10)

In generale, ho problemi a modificare i temi di default dei controlli perché non trovo documentazione utile. Sarebbe bello se qualcuno mi può aiutare con il colore di evidenziazione e mi consiglia anche una buona documentazione.

risposta

18

In realtà un modo migliore per scoprire le proprietà dello stile è utilizzare Blend.

Innanzitutto, apri la pagina in Blend. Quindi fare clic destro sul tuo ListView e andare

Modifica modelli aggiuntivi> Modifica elemento generato Container (ItemContainerStyle)> Modifica copia.

Assegnare un nome e premere OK.

Ora avete generato lo stile completo integrato per il vostro ListViewItem s ed è qui che potete trovare tutte le informazioni sul loro aspetto, animazioni e altri comportamenti visivi.

Si dovrebbe essere guardare a questo pezzo di codice -

<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}" /> 

vedere la linea SelectedBackground="{ThemeResource SystemControlHighlightListAccentLowBrush}"? È lì che puoi applicare il tuo colore. Tieni presente che dovrebbe essere di tipo Brush anziché Color.

+1

Grazie! È proprio quello di cui avevo bisogno. – alecardv

10

Se non si desidera utilizzare XAML, qui è un modo ancora più semplice (a mio parere) per modificare queste impostazioni, utilizzando C#:

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

In questo modo si può veramente personalizzare i tuoi oggetti in modo logico.

+0

dove li imposti? – yalematta

2

Per estendere la risposta di bastecklein. Si desidera utilizzare App anziché Applicazione affinché questo metodo funzioni in un progetto UWP. Puoi utilizzare questo codice nel tuo App.xaml.cs mentre carichi il frame iniziale, oppure puoi semplicemente impostare il colore della risorsa sul codice dietro la pagina che vuoi influenzare.

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

Se metto questo in App.xaml.cs, le modifiche si rifletteranno sull'intera applicazione? – alecardv

+0

sfortunatamente sì. Tuttavia, è possibile cambiare il colore a livello di codice una volta che l'UIElement ha il focus. Quindi, se fai clic sul pulsante del menu hamburger, attiva quel codice con un colore personalizzato. Quindi se fai clic su un altro elemento che desideri avere un colore diverso, attiva nuovamente il codice. –

+0

Nel mio caso per qualche motivo solo questa versione "App.Current" ha funzionato. "Application.Current" non ha avuto alcun effetto. Grazie uomo! –