WPF自定义Validation.ErrorTemplate不生效及DataGrid输入验证问题
核心原因
DataGrid的列控件样式继承逻辑和普通独立控件不同,DataGridTextColumn的编辑态文本框不会默认应用你在Window.Resources中定义的全局TextBox样式,因此你自定义的Validation.ErrorTemplate没有生效。
修复方法
你只需要为DataGridTextColumn显式配置EditingElementStyle属性,指定编辑态文本框的错误模板即可,修改后的列代码如下:
<DataGridTextColumn Header="Age" > <DataGridTextColumn.Binding> <Binding Path="Age"> <Binding.ValidationRules> <local:AgeValidationRuleUnder18></local:AgeValidationRuleUnder18> </Binding.ValidationRules> </Binding> </DataGridTextColumn.Binding> <!-- 新增编辑态样式配置 --> <DataGridTextColumn.EditingElementStyle> <Style TargetType="TextBox"> <Setter Property="Validation.ErrorTemplate" > <Setter.Value> <ControlTemplate> <StackPanel Background="Aqua"> <!-- 保留原控件内容展示,避免输入框消失 --> <AdornedElementPlaceholder/> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </DataGridTextColumn.EditingElementStyle> </DataGridTextColumn>
注意要在错误模板里加入AdornedElementPlaceholder,否则编辑状态下的输入框会被隐藏,无法正常输入内容。如果需要在单元格非编辑状态下也展示自定义的验证错误样式,还可以额外配置ElementStyle属性,给展示态的TextBlock也设置对应的错误模板。
内容的提问来源于stack exchange,提问作者Piotr Golacki
相关产品推荐
相关产品推荐

