J'ai un simple WPF ListView et une question simple:
Est-il possible de désactiver la sélection, donc lorsque l'utilisateur clique sur la ligne, la ligne n'est pas mise en surbrillance?
Je voudrais que la ligne 1 ressemble à la ligne 0 lorsque vous cliquez dessus.
Éventuellement lié: puis-je styliser l'apparence du survol / de la sélection? Par exemple. pour remplacer l'aspect de survol dégradé bleu (ligne 3) par une couleur unie personnalisée. J'ai trouvé ceci et cela , malheureusement sans aide.
(Obtenir la même chose sans utiliser ListView est également acceptable. J'aimerais simplement pouvoir utiliser le défilement logique et la virtualisation de l'interface utilisateur comme le fait ListView)
Le XAML pour ListView est:
<ListView Height="280" Name="listView">
<ListView.Resources>
<!-- attempt to override selection color -->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}"
Color="Green" />
</ListView.Resources>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<!-- more columns -->
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
Réponses:
Selon le commentaire de Martin Konicek, pour désactiver complètement la sélection des éléments de la manière la plus simple:
Cependant, si vous avez toujours besoin de la fonctionnalité de ListView, comme la possibilité de sélectionner un élément, vous pouvez désactiver visuellement le style de l'élément sélectionné comme suit:
Vous pouvez le faire de plusieurs façons, de la modification du ControlTemplate de ListViewItem à la définition d'un style (beaucoup plus facile). Vous pouvez créer un style pour les ListViewItems à l'aide de ItemContainerStyle et «désactiver» le pinceau d'arrière-plan et de bordure lorsqu'il est sélectionné.
De plus, à moins que vous n'ayez un autre moyen d'avertir l'utilisateur lorsque l'élément est sélectionné (ou juste pour le test), vous pouvez ajouter une colonne pour représenter la valeur:
la source
BasedOn="{StaticResource {x:Type ListViewItem}}"
pour ne pas remplacer le reste de mes styles de grille, mais je pense aussi que vous devriez faire de votre commentaire la réponse acceptéeLa réponse de Moore ne fonctionne pas, et la page ici:
Spécification de la couleur de sélection, de l'alignement du contenu et de la couleur d'arrière-plan des éléments dans une zone de liste
explique pourquoi cela ne peut pas fonctionner.
Si votre liste contient uniquement du texte de base, le moyen le plus simple de résoudre le problème consiste à utiliser des pinceaux transparents.
Cela produira des résultats indésirables si les cellules de la vue de liste contiennent des contrôles tels que des comboboxes, car cela change également leur couleur. Pour résoudre ce problème, vous devez redéfinir le modèle du contrôle.
la source
Définissez le style de chaque ListViewItem pour que Focusable soit défini sur false.
la source
Voici le modèle par défaut pour ListViewItem de Blend:
Modèle ListViewItem par défaut:
Supprimez simplement le déclencheur IsSelected et IsSelected / IsSelectionActive MultiTrigger, en ajoutant le code ci-dessous à votre style pour remplacer le modèle par défaut, et il n'y aura aucun changement visuel une fois sélectionné.
Solution pour désactiver les modifications visuelles de la propriété IsSelected:
la source
Le moyen le plus simple que j'ai trouvé:
la source
ListView.ItemContainerStyle
!Suite à la solution ci-dessus ... j'utiliserais un MultiTrigger pour permettre aux surlignages MouseOver de continuer à fonctionner après la sélection de sorte que le style de votre ListViewItem soit:
la source
D'accord, peu de retard dans le jeu, mais aucune de ces solutions n'a vraiment fait ce que j'essayais de faire. Ces solutions ont quelques problèmes
Je voulais un ListView avec les en-têtes de regroupement, et chaque ListViewItem devrait simplement être `` informatif '' sans sélection ni survol, mais le ListViewItem contient un bouton sur lequel je veux être cliquable et survolé.
Donc, ce que je veux vraiment, c'est que le ListViewItem ne soit pas du tout un ListViewItem.Ainsi, j'ai surchargé le ControlTemplate de ListViewItem et en ai simplement fait un ContentControl simple.
la source
L'une des propriétés de la vue de liste est
IsHitTestVisible
. Décochez-le.la source
IsHitTestVisible
le bouton ne peut pas être cliqué. Il agit commeIsEnabled = false;
Ceci est pour les autres qui peuvent rencontrer les exigences suivantes:
Si vous êtes comme moi (en utilisant WPF avec .NET 4.5) et que vous constatez que les solutions impliquant des déclencheurs de style ne fonctionnaient tout simplement pas, voici ma solution:
Remplacez le ControlTemplate de ListViewItem dans un style:
..Et le DataTemplate:
Il en résulte au moment de l'exécution (l'élément 'B' est sélectionné, l'élément 'D' a la souris dessus):
la source
Utilisez le code ci-dessous:
la source
Le code ci-dessous désactive la sélection de ligne ListViewItem et permet également d'ajouter un remplissage, une marge, etc.
la source
Ci-dessous le code désactiver le focus sur ListViewItem
la source