Come faccio a fare questo? Voglio sbarazzarmi di quel fastidioso bordo rosso che appare su ogni cella datagrid non valida.Come sbarazzarsi del bordo rosso quando una cella DataGrid non è valida?
risposta
Impostare ValidatesOnDataErrors e ValidatesOnExpcetions su False per l'associazione della cella. Nel caso in cui si desiderino le convalide, è necessario ovverare il modello di convalida per il controllo. Si prega di fare riferimento alla mia risposta qui - Validation Error Style in WPF, similar to Silverlight
Odiavo il bordo rosso perché è stato messo in adorner e adorners sedersi sulla parte superiore della finestra, il che significa che se il vostro elemento è parzialmente/totalmente nascosto da un altro elemento (simile è in una griglia) mostra ancora: (
Ciò non significava che non volevo alcuna personalizzazione, quindi posso ancora evidenziare i miei elementi in rosa, o cambiare il loro in primo piano e avere il clip DataGridCell correttamente Tutto ciò che si può fare usando un trigger di stile
Spero che questo aiuti!
<DataGrid.Resources>
<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockErrorStyle">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<!-- Just the adorned element means NO RED BORDER -->
<AdornedElementPlaceholder Name="controlWithError" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="Background" Value="Pink"/>
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
...
<DataGridTemplateColumn Header="Description" MinWidth="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Description, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"
Style="{StaticResource ResourceKey=TextBlockErrorStyle}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Ho avuto questo stesso problema, ma nel mio caso non stavo usando IDataError
o INotifyDataErrorInfo
. Sto usando uno stile personalizzato ValidationRule
e stili per gestire la mia logica di convalida e la presentazione. Stavo già utilizzando il DataGrid RowStyle
per visualizzare uno stile personalizzato per la riga con errori, quindi ho pensato che sarebbe stato facile fare qualcosa di simile con DataGridCell.
Cose da notare:
non si può semplicemente definire uno stile e impostare il
DataGrid.CellStyle
. Invece devi usare loElementStyle
e/o loEditingElementStyle
.Lo stile
TargetType
deve corrispondere al tipo DataGridColumn utilizzato dalla cella. Così, per una DataGridComboBoxColumn laTargetType
dovrebbe essereComboBox
DataGrid XAML Colonna:
<DataGridComboBoxColumn Header="Column1"
ItemsSource="{Binding Path=Column1Path}"
DisplayMemberPath="Column1DisplayPath"
ElementStyle="{StaticResource DGComboColValidationStyle}"
EditingElementStyle="{StaticResource DGComboColValidationStyle}">
<DataGridComboBoxColumn.SelectedItemBinding>
<Binding Path="Column1Path" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<Validation:CustomValidationRule ValidationStep="UpdatedValue" ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</DataGridComboBoxColumn.SelectedItemBinding>
</DataGridComboBoxColumn>
Style Definitions
<Style x:Key="DGComboColValidationStyle" TargetType="{x:Type ComboBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderThickness="1"
BorderBrush="{Binding ElementName=adorner1, Path=DataContext[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"
CornerRadius="3">
</Border>
<AdornedElementPlaceholder Name="adorner1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DGTextColValidationStyle" TargetType="{x:Type TextBlock}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderThickness="1"
BorderBrush="{Binding ElementName=adorner2, Path=DataContext[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"
CornerRadius="3">
</Border>
<AdornedElementPlaceholder Name="adorner2"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DGRowValidationStyle" TargetType="{x:Type DataGridRow}">
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate x:Name="DGRowValidationTemplate">
<Grid>
<Ellipse Width="12" Height="12" Stroke="Black" StrokeThickness="0.5"
Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"/>
<TextBlock FontWeight="Bold" Padding="4,0,0,0"
Margin="0" VerticalAlignment="Top" Foreground="White" Text="!"
ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationMessage}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent.ValidationType, Converter={StaticResource ValidationTypeColorConverter}}"/>
</Trigger>
<Trigger Property="Validation.HasError" Value="false">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent" />
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="DGCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="false">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=(Validation.Errors)[0].ErrorContent.ValidationMessage}"/>
</Trigger>
</Style.Triggers>
</Style>
È possibile controllare questo pure How to: Implement Validation with the DataGrid Control
Si può solo aggiungere questa riga al vostro DataGrid:
<DataGrid Validation.ErrorTemplate="{x:Null}" />
- 1. Bordo rosso inatteso (errore di convalida) su DataGrid quando si seleziona una riga vuota
- 2. Disattiva bordo cella DataGrid corrente nella modalità di selezione FullRow
- 3. Significato del bordo rosso lampeggiante nell'emulatore
- 4. Come rimuovere il bordo rosso in phpStorm?
- 5. Come sbarazzarsi del bordo per un Iframe in IE8
- 6. Il bordo rosso rimane sul TextBox anche dopo che l'immissione dei dati è valida
- 7. Evidenziazione Evidenziazione cella in una vista datagrid
- 8. PHPExcel imposta il colore del bordo di una cella
- 9. Rimuovi il bordo dalla cella selezionata di una riga in datagrid
- 10. Come sbarazzarsi di UIAPearance quando non è necessario?
- 11. Come selezionare una singola cella in un datagrid WPF?
- 12. Crea bordo diagonale di una cella
- 13. WPF show popup su cella DataGrid MouseOver
- 14. Come sbarazzarsi del file appname.vshost.exe?
- 15. DataGrid WPF: come posso interrompere lo scorrimento automatico quando si fa clic su una cella?
- 16. linee mulitiple in una cella in una vista datagrid
- 17. Come posso evidenziare un'intera riga DataGrid quando si fa clic su una singola cella?
- 18. Trigger DataGrid WPF sul contenuto della cella
- 19. Aggiorna cella DataGrid se altre celle cambiano
- 20. Come sbarazzarsi del Overscroll bagliore
- 21. Come si disegna un bordo attorno a una cella DataGridView mentre viene modificato?
- 22. Specificare la cella DataGrid su più colonne
- 23. Sfondo cella WPF DataGrid utilizzando il binding
- 24. Come impostare il colore rosso testo bordo quando la validazione fallisce
- 25. Come sbarazzarsi del bordo superiore in dissolvenza nella modalità schermo intero di Android?
- 26. Impostazione TextTrimming (CharacterEllipsis) nella cella DataGrid
- 27. Datagrid Get WPF Valore cella selezionato
- 28. DataGridView lancio "InvalidOperationException: L'operazione non è valida ..." quando si aggiunge una riga
- 29. Validazione sul campo di testo: bordo rosso evidenziato, iPhone
- 30. Impostazione del colore Colore di una riga DataGrid WPF quando è selezionata una riga
lo voglio per convalidare i dati. MA voglio cambiare lo stile predefinito del bordo rosso. –
Ho aggiornato la mia risposta. Per favore guarda. –