2011-11-28 3 views
0

Я хотел бы отключить выделение на ListViewItems, я не хочу, чтобы строка была такой, когда подсвечивалась, когда мышь над ней. Я установил приложение на системе Windows XP и отключить выбор строк, используя этот код:Как удалить выделение WPF ListViewItem в Windows 7

<ListView.ItemContainerStyle> 
    <Style TargetType="{x:Type ListViewItem}"> 
     <!--Disables selecting the row--> 
     <Setter Property="Focusable" Value="false"/> 
    </Style> 
</ListView.ItemContainerStyle> 

Это работает, но тот же код не работает в окнах 7.

+0

Когда я устанавливаю focusable на false на моей машине, ListViewItems не могут быть выбраны так и на мышке Hover над LvItem ничего не подсвечивается. (Win7) – SvenG

+0

Звучит как разность тем. У вас разные темы в вашем приложении? – user7116

ответ

0

Рассматривает извлекая Стиль по умолчанию для ListViewItem и установить все цвета в Transparent. Это решение имеет то преимущество, что ваш ListView будет выглядеть так же на Win7 и XP. Это решение не мешает пользователю выбирать элемент, он просто делает выбор невидимым. Может быть, этот стиль можно упростить несколько подробнее. Вот мой полный XAML:

<Window x:Class="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> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListViewItem}"> 
         <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2" SnapsToDevicePixels="true"> 
          <Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1"> 
           <Grid> 
            <Grid.RowDefinitions> 
             <RowDefinition MaxHeight="11"/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <Rectangle x:Name="UpperHighlight" Fill="#75FFFFFF" Visibility="Collapsed"/> 
            <GridViewRowPresenter Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
           </Grid> 
          </Border> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="true"> 
           <Setter Property="Background" Value="Transparent"/> 
           <Setter Property="BorderBrush" Value="Transparent"/> 
           <Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/> 
          </Trigger> 
          <Trigger Property="IsSelected" Value="true"> 
           <Setter Property="Background" Value="Transparent"/> 
           <Setter Property="BorderBrush" Value="Transparent"/> 
           <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/> 
           <Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/> 
           <Setter Property="Fill" TargetName="UpperHighlight" Value="#40FFFFFF"/> 
          </Trigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="Selector.IsSelectionActive" Value="false"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" Value="Transparent"/> 
           <Setter Property="BorderBrush" Value="Transparent"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsSelected" Value="true"/> 
            <Condition Property="IsMouseOver" Value="true"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" Value="Transparent"/> 
           <Setter Property="BorderBrush" Value="Transparent"/> 
          </MultiTrigger> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <StackPanel> 
     <ListView> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn/> 
        <GridViewColumn/> 
        <GridViewColumn/> 
        <GridViewColumn/> 
       </GridView> 
      </ListView.View> 
      <ListViewItem Content="ListViewItem" /> 
      <ListViewItem Content="ListViewItem" /> 
      <ListViewItem Content="ListViewItem" IsSelected="True"/> 
      <ListViewItem Content="ListViewItem" /> 
      <ListViewItem Content="ListViewItem" /> 
      <ListViewItem Content="ListViewItem" /> 
      <ListViewItem Content="ListViewItem" /> 
     </ListView> 
     <Button Height="30"></Button> 
    </StackPanel> 

</Window> 
Смежные вопросы