Ich verwende ein DataGrid im Zeilenauswahlmodus (d. H. SelectionUnit="FullRow"
). Ich möchte einfach den Rahmen entfernen, der um die aktuelle Zelle herum platziert wird, wenn der Benutzer eine Zeile markiert, um eine echte vollständige Zeilenauswahl (und keine Auswahl auf Zellenebene) zu erhalten. Es macht mir nichts aus, dass das Gitter die aktuelle Zelle beibehält, ich möchte nur die lästige aktuelle Zellengrenze entfernen, vielleicht indem ich den Stil der aktuellen Zelle ändere. Was ist der einfachste Weg, dies zu tun?DataGrid-Zellenrahmen im FullRow-Auswahlmodus deaktivieren
Antwort
könnten Sie setzen den BorderThickness
für DataGridCell
auf 0
<DataGrid ...
SelectionUnit="FullRow">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<!-- Update from comments.
Remove the focus indication for the selected cell -->
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</DataGrid.CellStyle>
<!-- ... -->
</DataGrid>
<Style x:Key="DataGrid" TargetType="DataGrid">
<Setter Property="CellStyle">
<Setter.Value>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}" />
<Setter Property="Background" Value="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" />
</Style>
</Setter.Value>
</Setter>
</Style>
Das Hinzufügen dieser beiden Zeilen hilft dabei, den Stil des ResourceDictionary beizubehalten, danke @marius. – Rachel
Wenn Sie nur eine Grenze angezeigt werden soll, wenn die Zelle bearbeitet werden kann und ausgewählt Sie können die Datagridcell-Vorlage außer Kraft setzen und einen Multitrigger hinzu, wenn die Zelle ist ausgewählt und nicht IsReadOnly. Dann wird keine Grenze gezeigt für Zellen, wenn Sie IsReadOnly = true für die Spalte oder Datagrid setzen
<ControlTemplate x:Key="MellowDataGridCellTemplate" TargetType="{x:Type DataGridCell}">
<Grid>
<ContentPresenter VerticalAlignment="Center" />
<Rectangle Name="FocusVisual" Stroke="White" StrokeThickness="1" Fill="Transparent" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" IsHitTestVisible="false" Opacity="0" />
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsReadOnly" Value="False" />
<Condition Property="IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="FocusVisual" Property="Opacity" Value="1"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Verwenden Sie die Vorlage in einem Stil
<Style TargetType="{x:Type DataGridCell}" x:Key="MellowGridDataGridCell">
<Setter Property="Template" Value="{StaticResource MellowDataGridCellTemplate}" />
</Style>
und verwenden Sie den Stil
<DataGrid CellStyle={StaticResource MellowGridDataGridCell >
...
</DataGrid>
Wenn Sie die xceed
verwenden, stellen Sie die NavigationBehavior
auf RowOnly
<xcdg:DataGridControl NavigationBehavior="RowOnly" SelectionMode="Single" ....
Sah hier eine andere Antwort, die nahe war, aber es wurde das Focus-Rechteck nicht los. Hier ist, wie man alle Grenzen auslöschen kann.
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>
</DataGrid.Resources>
Da auch technisch noch jene Zellen Fokus erhalten Sie (Sie gerade sehen es nicht), mit der Tabulatortaste in der nächsten Zeile anstelle der nächsten Zelle zu machen, definiere ich einen Stil Zelle basierend auf das obige aber das fügt auch das folgende hinzu ...
... dann wende ich das an alle außer der ersten Spaltendefinition an. Auf diese Weise wird die Tabulatortaste zur nächsten Zeile und nicht zur nächsten Zelle weitergeleitet.
Zurück zu den Grenzen jedoch. Wenn Sie wollen, dass sie verstecken, aber immer noch wollen sie Teil des Layouts für abstands Gründen ändern, um die oben dazu ...
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>
</DataGrid.Resources>
Genießen Sie sein! :)
Dies ist noch näher, aber es gibt noch eine Einschränkung: Wenn Sie auf Spalte 0 klicken, erhalten Sie den aktiven Markierungspinsel (wie erwartet), aber wenn Sie auf Spalte 1 klicken, erhalten Sie den inaktiven Markierungspinsel (unerwartet). Der inaktive Pinsel klemmt (klickt auf andere Zeilen), bis Sie auf Spalte 0 klicken. Dann bleibt der aktive Pinsel haften, bis das DataGrid den Fokus verliert. –
Interessant. Ich habe das vorher nicht gesehen, aber ich werde es jetzt definitiv versuchen. Der Grund, warum ich das hinzugefügt habe, war jedoch, die Tab-Reihenfolge zu korrigieren. Das heißt, vielleicht ist die Behebung so einfach wie focusable = false zu istabstop = false zu ändern. Es sollte das Gleiche erreichen. – MarqueIV
Ich habe gerade versucht, die 'IsTabStop =" False "' zwicken und es scheint alle Fälle abzudecken. Technisch betrachtet erhält die Zelle ohne erste Spalte den Fokus, wenn Sie auf klicken und Sie können den Pfeil nach links/rechts bewegen, um den Fokus auf andere Zellen zu ändern, aber die erste Zelle oder das nächste Steuerelement der nächsten Zeile wird markiert (wenn eine der Zellen der letzten Zeile fokussiert ist) . Ich bezweifle jedoch, dass das ein Problem ist. Vielleicht für Screenreader? Trotzdem danke! –
- 1. QlikView: Elementreorganisation im Listenfeld deaktivieren
- 2. WebFaultClientMessageInspector im WCF-Client deaktivieren?
- 3. Konsolenmeldungen im Flask-Server deaktivieren
- 4. Textfeld im Zielansicht-Controller deaktivieren
- 5. Drag & Drop im Lösungsexplorer deaktivieren
- 6. CSRF-Token im Anmeldeformular deaktivieren
- 7. Automatisches Drehen im Fragment deaktivieren
- 8. ViewRootImpl im Android-Log deaktivieren?
- 9. Autofill-Modus im Noweb-Modus deaktivieren
- 10. Deaktivieren von Zeilen im extjs-Raster
- 11. deaktivieren Scrollen zu Zelle im Fokus
- 12. XML-Beispiele im WCF-REST-Service deaktivieren?
- 13. Deaktivieren Formularfeld Speichern im Browser, Autocomplete
- 14. Deaktivieren der Bestätigungsseite im Frühjahr OAuth2
- 15. Ausgewählte Auswahlmöglichkeiten im eckigen Modus deaktivieren
- 16. deaktivieren Federsicherung im Frühjahr Boot App
- 17. Deaktivieren Sie SSL-Warnungen im Browser
- 18. Deaktivieren der Wischgesten im mobilen Chrome-Browser
- 19. So deaktivieren Sie ToolStripMenuItem im Kontextmenü Dynamisch?
- 20. Vim Deaktivieren der Maus nur im Einfügemodus
- 21. deaktivieren Dock erscheint mit Mouseover im Vollbildmodus
- 22. Broadcast in SimpMessageTemplate.sentToUser (...) im Frühjahr deaktivieren 4.2.4
- 23. Wollen Picker Sonntag im Datum deaktivieren
- 24. Deaktivieren des Zwischenspeicherns im .NET WebBrowser-Steuerelement?
- 25. Schaltfläche "Reload Grid" im Nav deaktivieren
- 26. iphone, deaktivieren Tabelle gleiten im Bearbeitungsmodus
- 27. Jammit deaktivieren Java-Komprimierung im Produktionsmodus
- 28. Emacs: Thema Hintergrundfarbe im Terminal deaktivieren
- 29. Aktivieren/Deaktivieren des Menüelements im Eclipse-Plugin
- 30. Google Analytics im iOS-Simulator deaktivieren
Dies funktioniert nicht, wenn der Benutzer die Pfeiltasten verwendet. Der gepunktete Auswahlrahmen erscheint weiterhin in den Zellen. –
@Michael Yanni: Sie sprechen über den 'FocusVisualStyle'. Um es zu deaktivieren, setze es im 'CellStyle' auf Null wie' ' –
Wie bekomme ich den fehlenden Abstand der Zellen mit dem Rahmen zurück? bis 0? – ygoe