¿Cómo hago esto? Quiero deshacerme de ese molesto borde rojo que se muestra en cada celda de cuadrícula de datos no válida.¿Cómo deshacerse del borde rojo cuando una celda de DataGrid no es válida?
Respuesta
Establezca ValidatesOnDataErrors y ValidatesOnExpcetions en False para el enlace de su celda. En caso de que desee sus validaciones, debe superar la Plantilla de validación para su control. Por favor refiérase a mi respuesta aquí - Validation Error Style in WPF, similar to Silverlight
odiaba el borde rojo, ya que fue puesto en el embellecedor y adorners se sientan en la parte superior de la ventana, lo que significa que si su elemento es parcialmente/totalmente oculto por otro elemento (como se está en una cuadrícula) el adorno completo todavía muestra :(
Eso no significaba que no quisiera una personalización, así que aún puedo resaltar mis artículos en rosa, o cambiar su primer plano y hacer que el DataGridCell recortara correctamente todo apagado. Usted puede hacer esto mediante el uso de un disparador de estilo.
Espero que esto ayude!
<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>
Tuve este mismo problema, pero en mi caso yo no utilizaba IDataError
o INotifyDataErrorInfo
. Estoy usando un ValidationRule
personalizado y estilos para manejar mi lógica de validación y presentación. Ya estaba usando DataGrid RowStyle
para mostrar un estilo personalizado para la fila que tiene errores, así que pensé que sería fácil hacer algo similar con DataGridCell.
A tener en cuenta:
no se puede simplemente definir un estilo y establecer el
DataGrid.CellStyle
. En su lugar, debe usarElementStyle
y/oEditingElementStyle
.El estilo
TargetType
tiene que coincidir con el tipo DataGridColumn que está utilizando la celda. Así que para una DataGridComboBoxColumn laTargetType
debería serComboBox
DataGrid XAML Columna:
<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>
Definiciones de estilo
<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>
Usted puede comprobar esto también How to: Implement Validation with the DataGrid Control
Usted puede añadir esta línea a su cuadrícula de datos:
<DataGrid Validation.ErrorTemplate="{x:Null}" />
- 1. Cambio de FlowDirection de una celda en DataGrid de Wpf
- 2. WPF Datagrid: evento SelectionChanged no se produce cuando SelectionUnit = "Celda"
- 3. Cómo deshacerse del borde con un JTable/JScrollPane
- 4. Significado del borde rojo parpadeante en el emulador
- 5. ¿Cómo deshacerse de UIAppearance cuando no es necesario?
- 6. ¿Cómo puedo resaltar una fila completa de DataGrid cuando se hace clic en una sola celda?
- 7. WPF DataGrid: ¿cómo puedo detener el desplazamiento automático cuando se hace clic en una celda?
- 8. jQuery: Cambiar el color del borde de la celda de una tabla
- 9. ¿Por qué el color del borde de la celda de la tabla html no cambia?
- 10. WPF DataGrid - Establecer una celda en modo de edición programáticamente
- 11. Validación en el campo de texto: borde rojo resaltado, iPhone
- 12. WPF toolkit datagrid texto de celda envoltura
- 13. Cómo deshacerse de borde para un Iframe en IE8
- 14. ¿Cómo deshacerse del borde exterior azul al hacer clic en un campo de entrada de formulario?
- 15. mysqli fetch_all() ¿no es una función válida?
- 16. ¿Cómo deshacerse del borde de desvanecimiento superior en el modo de pantalla completa de Android?
- 17. ¿Cómo deshacerse del archivo appname.vshost.exe?
- 18. WPF datagrid Color de la celda según el valor de la celda preivous
- 19. No es una aplicación Win32 válida
- 20. Qt QTableWidget borde gris punteado alrededor de una celda seleccionada
- 21. Cómo obtener el nivel de celda ComboBox para WPF DataGrid?
- 22. MySQL no es una aplicación win32 válida
- 23. No es una Office Add Add válida
- 24. Cómo copiar el valor de celda DataGrid al portapapeles
- 25. ¿Cómo deshacerse del borde y la imagen utilizada como un enlace en Firefox?
- 26. Ventana emergente de WPF en la celda DataGrid MouseOver
- 27. conversión especificada no es válida
- 28. retorno 0 cuando un valor de una celda es negativo
- 29. cómo visibles borde de celda para el único derecho e inferior de la celda Pdf itext
- 30. actualización de DataGrid después de la edición de celda
lo quiero para validar los datos. PERO quiero cambiar el estilo de borde rojo predeterminado. –
He actualizado mi respuesta. Por favor échale un vistazo. –