128 votes

Désactiver la sélection de la ListView WPF

Est-il possible de désactiver la sélection d'un ListView WPF, de sorte que lorsque l'utilisateur clique sur une ligne, la ligne n'est pas mise en surbrillance?

ListView
(source: <a href="https://artax.karlin.mff.cuni.cz/%7Ekonim5am/Vis/wpfGrid.png" rel="nofollow noreferrer">konim5am at artax.karlin.mff.cuni.cz</a>)

J'aimerais que la ligne 1 ressemble juste à la ligne 0 lorsqu'elle est cliquée.

Peut-être lié : puis-je personnaliser l'apparence du survol/sélection? Par exemple, remplacer l'aspect de survol en dégradé bleu (ligne 3) par une couleur unie personnalisée. J'ai trouvé ceci et cela, malheureusement cela n'a pas aidé.

(Atteindre le même résultat sans utiliser ListView est également acceptable. Je voudrais simplement pouvoir utiliser un défilement logique et une virtualisation de l'interface utilisateur comme le fait ListView)

Le XAML pour ListView est :

0 votes

Je n'ai jamais utilisé de ListView dans WPF auparavant, mais je suis sûr qu'il existe une sorte de propriété IsEnabled qui, si elle est définie sur false, désactiverait le contrôle entier et accomplirait probablement ce que vous recherchez, mais je ne suis pas sûr à 100%.

0 votes

Salut, oui il y a une propriété IsEnabled, qui peut désactiver l'ensemble du ListView. J'ai besoin que le ListView fonctionne normalement, juste sans afficher la sélection.

2voto

Shimmy Points 23393

Un autre contrôle similaire à ListView et ListBox qui n'offre pas de sélection est ItemsControl, envisagez d'utiliser celui-ci à la place.

1voto

Une autre façon de désactiver la sélection.

C'est comme

mais sans le défilement désactivé

0voto

Le code ci-dessous désactive la sélection de ligne ListViewItem et permet également d'ajouter du padding, de la marge, etc.

       <Setter Property="Template">                                                                                            
         <Setter.Value>                                                                                             
           <ControlTemplate TargetType="{x:Type ListViewItem}">                                                                                                    
              <ListViewItem Padding="0" Margin="0">                                                                                                        
                  <ContentPresenter />
              </ListViewItem>
           </ControlTemplate>                                                          
         </Setter.Value>                                                                                       
         </Setter>

0voto

mincasoft Points 99

Le code ci-dessous désactive le Focus sur ListViewItem

    <Setter Property="Background" Value="Transparent" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter>

0voto

user3526723 Points 61
                    <Setter Property="Background" Value="Transparent" />
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="VerticalContentAlignment" Value="Center"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListViewItem}">
                                <Grid Background="{TemplateBinding Background}">
                                    <Border Name="Selection" Visibility="Collapsed" />
                                    <!-- Cela est utilisé lorsque GridView est mis à l'intérieur de ListView -->
                                    <GridViewRowPresenter Grid.RowSpan="2"
                                      Margin="{TemplateBinding Padding}"
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X