web-dev-qa-db-ja.com

UWPで選択したListViewアイテムのハイライト色を変更する方法(Windows 10)

C#とXAMLを使用してWindows 10アプリで作業しています。 ListViewがあり、選択したアイテムのデフォルトのHighLight色を変更したい。私は多くのコード例を見ました( this など)が、すべてWP8またはWin8用に設計されています。

一般に、有用なドキュメントが見つからないため、コントロールのデフォルトのテーマを変更するのに問題があります。ハイライトの色について誰かが私を助けてくれたり、良いドキュメントを勧めてくれたら素晴らしいと思います。

23
alecardv

実際には、スタイリングプロパティを検出するより良い方法は、Blendを使用することです。

まず、Blendでページを開きます。次に、ListViewを右クリックして、

追加テンプレートの編集>生成されたアイテムコンテナの編集(ItemContainerStyle)>コピーの編集

名前を付けて[〜#〜] ok [〜#〜]を押します。

これで、ListViewItemsの完全な組み込みスタイルが生成されました。ここで、外観、アニメーション、およびその他の視覚的動作に関するすべての情報を見つけることができます。

このコードを見てください-

<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型である必要があることに注意してください。

21
Justin XL

XAMLを使用したくない場合は、c#を使用してこれらの設定を変更する(私の意見では)さらに簡単な方法があります。

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

これにより、アイテムを論理的にカスタマイズできます。

11
bastecklein

これは、リソースをオーバーライドすることでXAMLで実現できます。

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

Bastecklein's Answerを拡張します。このメソッドをUWPプロジェクトで機能させるには、アプリケーションではなくアプリを使用します。最初のフレームをロードするときにApp.xaml.csでこのコードを使用するか、影響するページの背後のコードにリソースの色を設定するだけです。

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