You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:06:02