2016-02-02 8 views
0

Я использую ListView с WrapPanel как его ItemsPanel. Мне нужно изменить стиль выбранных элементов - используйте другой цвет фона и добавьте границу вокруг выбранных элементов, как это делает Проводник Windows 7.Стиль выбора для ListView с WrapPanel

<ListView ItemsSource="{Binding Items}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 

    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Margin="10"> 
       <Rectangle Width="100" Height="100" Fill="Pink" /> 
       <TextBlock Text="{Binding Caption}" Margin="0,10,0,0" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

ответ

1

Просто спроектируйте ControlTemplate для типа по умолчанию и выбранного типа. Затем вы можете установить Selected ControlTemplate, если выбран любой элемент в ListView, иначе сохраните тип по умолчанию.

<Window.Resources> 
    <ControlTemplate x:Key="DEFAULT"> 
     <StackPanel Orientation="Vertical" Margin="10"> 
      <Rectangle Width="100" Height="100" Fill="Green" /> 
      <TextBlock Text="{Binding Caption}" Margin="0,10,0,0" /> 
     </StackPanel> 
    </ControlTemplate> 
    <ControlTemplate x:Key="SELECTED_TYPE"> 
     <Border BorderBrush="Gray" BorderThickness="1"> 
     <StackPanel Orientation="Vertical" Margin="10"> 
      <Rectangle Width="100" Height="100" Fill="Pink" /> 
      <TextBlock Text="{Binding Caption}" Margin="0,10,0,0" /> 
     </StackPanel> 
     </Border> 
    </ControlTemplate> 

    <Style x:Key="ListItemStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Background" Value="White"/> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Template" Value="{StaticResource SELECTED_TYPE}"/> 
       <Setter Property="Background" Value="Orange"/> 
      </Trigger> 
      <Trigger Property="IsSelected" Value="False"> 
       <Setter Property="Template" Value="{StaticResource DEFAULT}"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

<ListView ItemsSource="{Binding Items}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
      ItemContainerStyle="{StaticResource ListItemStyle}"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView>