Ter*_*nce 3 c# wpf wpfdatagrid
我发现当行的项目包含验证错误时,ContentPresenter用于显示 a 内容的DataGridTemplateColumn会显示默认值。ErrorTemplate我看不到任何直接的方法来阻止这种情况。有任何想法吗?
这是我第一次尝试确保不显示验证错误模板:
<DataGridTemplateColumn Width="70" Header="Enabled" Validation.ErrorTemplate="{x:Null}" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Enabled.Value}"
HorizontalAlignment="Center"
VerticalAlignment="Center" Validation.ErrorTemplate="{x:Null}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style >
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

使用 Snoop 我看到该单元格包含一个ContentPresenter显示验证错误的单元格。
我发现只能通过删除数据网格中所有内容呈现器上的错误模板来禁用此功能,如下所示:
<DataGrid.Resources>
<Style TargetType="ContentPresenter">
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Style>
</DataGrid.Resources>
Run Code Online (Sandbox Code Playgroud)
有没有办法只影响单个DataGridTemplateColumn?
这篇文章看起来很相似: DataGridCell Validation.ErrorTemplate被忽略
我找到了解决方案。添加针对ContentPresenter内部的资源样式DataGridTemplateColumn.CellStyle可以解决问题。
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Resources>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Style>
</Style.Resources>
</Style>
</DataGridTemplateColumn.CellStyle>
Run Code Online (Sandbox Code Playgroud)