Цвет выбора списка - PullRequest
       9

Цвет выбора списка

2 голосов
/ 22 мая 2009

Я играюсь с wpf и увидел следующую статью: WPF ListView Неактивный цвет выделения

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

Есть идеи?

UPDATE:

Я попробовал приведенный ниже ответ, и он наполовину прошел, он ограничивает область просмотра списка, но он перекрывает мой цвет фона. Я не могу получить правильный синтаксис, который я пробовал (обратите внимание на BasedOn):

    <Style x:Key="SourceListView" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
    </Style>

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource SourceListView}" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border
                             x:Name="Border"
                             BorderBrush="Transparent"
                             BorderThickness="1">
                        <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Затем я попробовал это:

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
        <Setter Property="Template">
            ...//Same as above
        </Setter>
    </Style>

Обе попытки просто устанавливают белый фон (или прозрачный, я не знаю). Я знаю, что это всего лишь синтаксис, и я был бы признателен за еще одно движение в правильном направлении:)

1 Ответ

4 голосов
/ 22 мая 2009

Измените ItemContainerStyle в ListView на стиль, который не меняет фон, когда элемент выбран, а вместо этого меняет цвет границы. Ниже приведен пример:

  <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}" />
     <Setter Property="Template">
        <Setter.Value>
           <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border
                 x:Name="Border"
                 BorderBrush="Transparent"
                 BorderThickness="1"
                 Background="{TemplateBinding Background}">
                 <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
              </Border>
              <ControlTemplate.Triggers>
                 <Trigger Property="IsSelected" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                 </Trigger>
              </ControlTemplate.Triggers>
           </ControlTemplate>
        </Setter.Value>
     </Setter>
  </Style>

А затем используйте такой стиль:

<ListView ItemContainerStyle="{StaticResource MyListViewItemStyle}">
   ...
</ListView>
...