66

複数の ListView 選択が連続して行われる WPF アプリケーションを作成しています (iTunes ブラウザーに似ています)。問題は、デフォルトの非アクティブな選択色が明るすぎることです。(下記参照) デフォルトの非アクティブな選択色 (薄すぎる)

非アクティブなリストビューがこのように見えるように、この色を変更するにはどうすればよいですか? (下記参照) 非アクティブな選択とアクティブな選択の色が同じ

解決

デフォルトの SystemColor を次のStyleようにオーバーライドします。

<Style TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
    </Style.Resources>
</Style>
4

7 に答える 7

65

変更SystemColors.ControlBrushKeyしてもうまくいかず、変更する必要がありました SystemColors.InactiveSelectionHighlightBrushKey

したがって、代わりに:

<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Red" />

私は使用しなければなりませんでした:

<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
于 2013-02-16T16:42:18.797 に答える
60

ListBoxテンプレートは、呼び出されたシステム カラーを使用して、ControlBrush非アクティブなハイライト カラーを設定します。したがって、その色をオーバーライドすることができます:

<ListBox>
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}">Red</SolidColorBrush>
    </ListBox.Resources>
</ListBox>
于 2008-12-19T20:43:57.190 に答える
20

答えは問題を解決する場合もありますが、コントロールが無効/読み取り専用の場合に壊れ、配色を利用するのではなく、配色を上書きするため、理想的ではありません。私の提案は、代わりにListBoxタグに以下を追加することです。

<ListBox....>
    <ListBox.Resources>
            <Style TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="Border" Property="Background"
                                            Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
        </Style>
    </ListBox.Resources>
</ListBox>

これにより、リストボックス項目が選択されている場合は常に(制御状態に関係なく)ハイライト背景色が設定されます。

私の答えは、次のブログとともに、すでに与えられた答えからの助けに基づいています:http: //blogs.vbcity.com/xtab/archive/2009/06/29/9344.aspx

于 2010-09-09T08:56:10.510 に答える
13

SystemColors のいくつかのプロパティをオーバーライドする必要があります。SystemColors Class (MSDN)を見てください。テキストの色に影響を与える InactiveSelectionHighlightTextBrushKey など、InactiveSelectionHighlightBrushKey よりも多くのプロパティがあります。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Yellow"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Blue"/>
        <Style TargetType="ListViewItem">
            <Setter Property="FontSize" Value="20" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Padding" Value="25,5" />
        </Style>
    </Window.Resources>
    <StackPanel Orientation="Horizontal">
        <ListView>
            <ListViewItem Content="Item" />
            <ListViewItem Content="Item" />
        </ListView>
        <ListView>
            <ListViewItem Content="Item" />
            <ListViewItem Content="Item" />
        </ListView>
    </StackPanel>
</Window>

ここに画像の説明を入力

于 2015-03-30T10:28:12.350 に答える
0

私にとってこれはトリックでした:

 <ListBox HorizontalContentAlignment="Stretch">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Label  Margin="-5, -2,-5,-2" Content="{Binding Item}">
                            <Label.Style>
                                <Style TargetType="Label">
                                    <Style.Triggers>
                                        <MultiDataTrigger>
                                            <MultiDataTrigger.Conditions>
                                                <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}},Path=IsFocused}" Value="False"/>
                                                <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True"/>
                                            </MultiDataTrigger.Conditions>
                                            <Setter Property="Background" Value="CornflowerBlue"/>
                                        </MultiDataTrigger>
                                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
                                            <Setter Property="Foreground" Value="White"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="False">
                                            <Setter Property="Foreground" Value="Black"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Label.Style>
                        </Label>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
于 2015-08-06T18:06:26.613 に答える