Разработка ListViewItems (выбор цвета) не работает вообще - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу разработать цвета выделения для моих ListViewItems индивидуально.Я нашел множество инструкций к этому.

Но почему-то: кажется, ничего не работает вообще.В моем текущем образце я повторно использовал образец из этой ссылки: Как стилизовать выделение ListView?

Я сделал так, чтобы он легко работал для TreeViewItems , но ни для ListViewItems ни ListBoxItems это работает.

Может кто-нибудь объяснить мне, что я делаю неправильно?Это мой xaml:

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"             
    mc:Ignorable="d"
    Height="200" Width="300">
<Window.Resources>
    <Style TargetType="ListViewItem">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrush}" Color="Gray"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
        </Style.Resources>
    </Style>
    <Style TargetType="ListBoxItem">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="true" >
                <Setter Property="Foreground" Value="Red" /> <!-- only foreground works -->
                <Setter Property="Background" Value="Green" />
            </Trigger>
        </Style.Triggers>
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrush}" Color="Gray"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
        </Style.Resources>
    </Style>
    <Style TargetType="TreeViewItem">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}" Color="Red"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrush}" Color="Gray"/>
            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Red"/>
        </Style.Resources>
    </Style>
</Window.Resources>
<StackPanel>
    <ListBox>
        <ListBoxItem>Item a 1</ListBoxItem>
        <ListBoxItem>Item a 2</ListBoxItem>
    </ListBox>
    <ListView>
        <ListViewItem>Item b 1</ListViewItem>
        <ListViewItem>Item b 2</ListViewItem>
    </ListView>
    <TreeView>
        <TreeViewItem Header="Node Level 0">
            <TreeViewItem Header="Node Level 1" />
        </TreeViewItem>
    </TreeView>
</StackPanel>
</Window>

и вот так он всегда выглядит:

enter image description here

Я также перепробовал все имеющиесяресурсные ключи SystemColors.Ни один не имел никакого эффекта.Этот снимок экрана - результат нового WpfApp, у меня нет глобальных стилей.

1 Ответ

0 голосов
/ 20 февраля 2019

Вот способ сделать это с ListBox и ListView:

<Window.Resources>

    <Style TargetType="{x:Type ListViewItem}" >
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="Border" Padding="0,5,0,5" SnapsToDevicePixels="true" Background="White" BorderThickness="1">
                        <ContentPresenter/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Foreground" Value="White"/>
                            <Setter TargetName="Border" Property="Background" Value="Red"/>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type ListBoxItem}" >
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="Border" Padding="0,5,0,5" SnapsToDevicePixels="true" Background="White" BorderThickness="1">
                        <ContentPresenter/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Foreground" Value="White"/>
                            <Setter TargetName="Border" Property="Background" Value="Red"/>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<StackPanel>
    <ListBox>
        <ListBoxItem>Item a 1</ListBoxItem>
        <ListBoxItem>Item a 2</ListBoxItem>
    </ListBox>
    <ListView>
        <ListViewItem>Item b 1</ListViewItem>
        <ListViewItem>Item b 2</ListViewItem>
    </ListView>
</StackPanel>

Код дает следующий результат:

Example

Лучший источник, который я нашел для этого - на форумах MSDN .Вы можете найти некоторые альтернативные варианты из обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...