Ich habe eine einfache WPF ListView und eine einfache Frage:
Ist es möglich, die Auswahl zu deaktivieren, sodass die Zeile nicht hervorgehoben wird, wenn der Benutzer auf die Zeile klickt?
Ich möchte, dass die Zeile 1 beim Klicken genauso aussieht wie die Zeile 0.
Möglicherweise verwandt: Kann ich das Aussehen des Hovers / der Auswahl stylen? Z.B. um den blauen Farbverlaufs-Hover-Look (Zeile 3) durch eine benutzerdefinierte Volltonfarbe zu ersetzen. Ich habe dies und das gefunden , leider nicht hilfreich.
(Dasselbe ohne ListView zu erreichen, ist ebenfalls akzeptabel. Ich möchte nur das logische Scrollen und die UI-Virtualisierung wie ListView verwenden können.)
Die XAML für ListView lautet:
<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>
Antworten:
Per Martin Koniceks Kommentar, um die Auswahl der Elemente auf einfachste Weise vollständig zu deaktivieren:
Wenn Sie jedoch weiterhin die Funktionalität der ListView benötigen, z. B. die Auswahl eines Elements, können Sie das Styling des ausgewählten Elements wie folgt visuell deaktivieren:
Sie können dies eine Reihe von Möglichkeiten tun, von der der ListViewItem Wechsel Control nur einen Stil (viel einfacher) einstellen. Sie können mit dem ItemContainerStyle einen Stil für die ListViewItems erstellen und den Hintergrund und den Rahmenpinsel bei Auswahl deaktivieren .
Sofern Sie den Benutzer nicht auf andere Weise benachrichtigen können, wenn das Element ausgewählt ist (oder nur zum Testen), können Sie eine Spalte hinzufügen, um den Wert darzustellen:
quelle
BasedOn="{StaticResource {x:Type ListViewItem}}"
damit es den Rest meiner Gitterstile nicht überschrieb, aber ich denke auch, dass Sie Ihren Kommentar zur akzeptierten Antwort machen solltenMoores Antwort funktioniert nicht und die Seite hier:
Festlegen der Auswahlfarbe, der Inhaltsausrichtung und der Hintergrundfarbe für Elemente in einer ListBox
erklärt, warum es nicht funktionieren kann.
Wenn Ihre Listenansicht nur einfachen Text enthält, können Sie das Problem am einfachsten mit transparenten Pinseln lösen.
Dies führt zu unerwünschten Ergebnissen, wenn die Zellen der Listenansicht Steuerelemente wie Comboboxen enthalten, da sich auch deren Farbe ändert. Um dieses Problem zu lösen, müssen Sie die Vorlage des Steuerelements neu definieren.
quelle
Setzen Sie den Stil jedes ListViewItem so, dass Focusable auf false gesetzt ist.
quelle
Hier ist die Standardvorlage für ListViewItem von Blend:
Standardvorlage ListViewItem:
Entfernen Sie einfach den IsSelected-Trigger und den IsSelected / IsSelectionActive MultiTrigger, indem Sie den folgenden Code zu Ihrem Stil hinzufügen, um die Standardvorlage zu ersetzen. Bei Auswahl werden keine visuellen Änderungen vorgenommen.
Lösung zum Deaktivieren der visuellen Änderungen der IsSelected-Eigenschaft:
quelle
Der einfachste Weg, den ich gefunden habe:
quelle
ListView.ItemContainerStyle
!Weiter zu der obigen Lösung ... Ich würde einen MultiTrigger verwenden, damit die MouseOver-Highlights nach der Auswahl weiter funktionieren, sodass der Stil Ihres ListViewItem wie folgt lautet:
quelle
Okay, etwas spät zum Spiel, aber keine dieser Lösungen hat genau das getan, was ich versucht habe. Diese Lösungen haben einige Probleme
Ich wollte eine ListView mit den Gruppierungsheadern, und jedes ListViewItem sollte nur 'informativ' sein, ohne Auswahl oder Mauszeiger, aber das ListViewItem enthält eine Schaltfläche, über die ich klicken und mit der Maus darüber fahren möchte.
Eigentlich möchte ich, dass das ListViewItem überhaupt kein ListViewItem ist. Also habe ich das ControlTemplate des ListViewItem überschrieben und es einfach zu einem einfachen ContentControl gemacht.
quelle
Eine der Eigenschaften der Listenansicht ist
IsHitTestVisible
. Deaktivieren Sie es.quelle
IsHitTestVisible
aufheben, kann die Schaltfläche nicht angeklickt werden. EsIsEnabled = false;
Dies gilt für andere Personen, die möglicherweise die folgenden Anforderungen erfüllen:
Wenn Sie wie ich (mit WPF mit .NET 4.5) sind und festgestellt haben, dass die Lösungen mit Stilauslösern einfach nicht funktionieren, ist hier meine Lösung:
Ersetzen Sie die ControlTemplate des ListViewItem in einem Stil:
..Und das DataTemplate:
Ergebnisse zur Laufzeit (Element 'B' ist ausgewählt, Element 'D' hat die Maus darüber):
quelle
Verwenden Sie den folgenden Code:
quelle
Der folgende Code deaktiviert die Zeilenauswahl von ListViewItem und ermöglicht das Hinzufügen von Auffüllungen, Rändern usw.
quelle
Unterhalb des Codes deaktivieren Sie Focus on ListViewItem
quelle