Как удалить WPF ListViewItem выбор в Windows 7 - PullRequest
0 голосов
/ 28 ноября 2011

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

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

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

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Просто используйте ItemsControl вместо ListView.

0 голосов
/ 30 ноября 2011

Рассмотрите возможность извлечения стиля по умолчанию для ListViewItem и установите для всех цветов значение Прозрачный.Преимущество этого решения в том, что ваш 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>
...