Sto utilizzando un DataGrid nella modalità di selezione riga (ad esempio, SelectionUnit="FullRow"
). Voglio semplicemente rimuovere il bordo che viene posizionato attorno alla cella corrente quando l'utente evidenzia una riga per avere una vera selezione completa delle righe (e nessuna selezione del livello di cella). Non mi interessa la nozione della griglia che mantiene la cella corrente, voglio solo rimuovere quel fastidioso bordo della cella corrente, magari cambiando lo stile della cella corrente. Qual è il modo più semplice per farlo?Disattiva bordo cella DataGrid corrente nella modalità di selezione FullRow
risposta
È possibile impostare la BorderThickness
per DataGridCell
a 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>
L'aggiunta di queste due linee aiuta a mantenere lo stile applicato da ResourceDictionary, grazie a @marius. – Rachel
Se si desidera visualizzare un bordo solo quando la cella è modificabile e selezionato è possibile ignorare il modello DataGridCell e aggiungere un MultiTrigger per quando la cella IsSelected e non IsReadOnly. Poi verrà mostrato nessun bordo per le celle se si imposta IsReadOnly = true per la colonna o DataGrid
<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>
Utilizzare la mascherina in stile
<Style TargetType="{x:Type DataGridCell}" x:Key="MellowGridDataGridCell">
<Setter Property="Template" Value="{StaticResource MellowDataGridCellTemplate}" />
</Style>
e utilizzare lo stile
<DataGrid CellStyle={StaticResource MellowGridDataGridCell >
...
</DataGrid>
Se si utilizza il xceed
DataGridControl
quindi impostare il NavigationBehavior
-RowOnly
<xcdg:DataGridControl NavigationBehavior="RowOnly" SelectionMode="Single" ....
Ho visto un'altra risposta qui che era vicina, ma non ha eliminato il rettangolo Focus. Ecco come cancellare tutti i confini.
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>
</DataGrid.Resources>
Inoltre, dal momento che tecnicamente quelle cellule ancora fanno ottenere messa a fuoco (basta non vede), per rendere l'avanzata tasto tab alla riga successiva invece della cella successiva, ho definire uno stile di cella sulla base di quanto sopra, ma che aggiunge anche il seguente ...
<DataGrid.Resources>
<Style x:Key="NoFocusDataGridCell" TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Setter Property="Focusable" Value="False" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="IsHitTestVisible" Value="False" />
</Style>
</DataGrid.Resources>
... poi applico che a tutti, ma la prima definizione di colonna. In questo modo il tasto Tab avanzerà alla riga successiva, non alla cella successiva.
Torna ai confini comunque. Se si desidera nascondere loro, ma ancora desidera che siano parte del layout per la spaziatura-motivi, cambiano quanto sopra a questo ...
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
</Style>
</DataGrid.Resources>
Enjoy! :)
Questo è ancora più vicino ma c'è ancora un avvertimento: se si fa clic sulla colonna 0 si ottiene il pennello di selezione attivo (come previsto), ma facendo clic sulla colonna 1+ si ottiene il pennello di selezione di selezione inattiva (imprevisto). I pennelli inattivi (facendo clic su altre righe) fino a fare clic sulla colonna 0. Quindi il pennello attivo rimane attivo fino a quando il DataGrid non viene messo a fuoco. –
Interessante. Non lo vedevo prima, ma sicuramente lo proverò ora. Il motivo per cui stavo aggiungendo che comunque era per fissare l'ordine di tabulazione. Detto questo, forse la correzione è semplice come cambiarla da focusable = false a istabstop = false. Dovrebbe ottenere la stessa cosa. – MarqueIV
Ho appena provato il comando 'IsTabStop =" False "' e sembra coprire tutti i casi. Tecnicamente la cella non di prima colonna riceve lo stato attivo quando si fa clic e si può usare la freccia sinistra/destra per cambiare lo stato attivo su altre celle, ma la tabulazione passa alla prima cella della riga successiva o al controllo successivo (se una delle celle dell'ultima riga è focalizzata) . Tuttavia, dubito che sia un problema. Forse per i lettori di schermo? Comunque grazie! –
- 1. WPF Toolkit Datagrid - come si disattiva la selezione?
- 2. Impostazione TextTrimming (CharacterEllipsis) nella cella DataGrid
- 3. DataGridView - "Stile di selezione cella" - Modifica cella
- 4. WPF trascinamento della selezione su DataGrid
- 5. Rimuovi il bordo dalla cella selezionata di una riga in datagrid
- 6. Prevenire selezione di riga multipla in WPF DataGrid
- 7. Selezione di UITableViewCell in modalità di modifica
- 8. WPF DataGrid - Come uscire automaticamente dalla modalità di modifica?
- 9. Selezione cella GWT
- 10. Disattiva selezione testo in Chrome
- 11. Cosa c'è di eccezionale nella modalità di selezione dei blocchi?
- 12. Attiva/disattiva Modalità schermo intero
- 13. WAM XAML: Come disabilitare la selezione multipla in un DataGrid?
- 14. Cambia colore del bordo di UITableViewCell sulla selezione
- 15. Come sbarazzarsi del bordo rosso quando una cella DataGrid non è valida?
- 16. DataGrid WPF - Imposta una cella in modalità di modifica in modo programmatico
- 17. Aggiorna cella DataGrid se altre celle cambiano
- 18. Crea bordo diagonale di una cella
- 19. modalità rilevabile Disattiva Bluetooth su Android
- 20. Sfondo cella WPF DataGrid utilizzando il binding
- 21. WPF show popup su cella DataGrid MouseOver
- 22. Specificare la cella DataGrid su più colonne
- 23. Evidenziazione Evidenziazione cella in una vista datagrid
- 24. Trigger DataGrid WPF sul contenuto della cella
- 25. Datagrid Get WPF Valore cella selezionato
- 26. Disattiva la selezione del testo nell'area testo
- 27. Selezione multipla Datagrid WPF senza CTRL o Spazio
- 28. DataGrid colonne calcolate
- 29. Disattiva la modalità viper in Emacs?
- 30. come applicare uno stile di cella di DataGrid cellulare
Questo non funziona se l'utente utilizza i tasti freccia. Il bordo di selezione della linea tratteggiata appare ancora nelle celle. –
@ Michael Yanni: Stai parlando di "FocusVisualStyle". Per disabilitarlo, impostarlo su null in 'CellStyle' come' ' –
Come posso recuperare la spaziatura mancante delle celle con il bordo impostato a 0? – ygoe