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

WPF DataGridTextColumn验证错误时ToolTip无法触发问题求助

问题解决:DataGridTextColumn验证错误时ToolTip不显示

问题原因

你当前仅给ElementStyle(非编辑状态的TextBlock)设置了ToolTip触发器,但当单元格处于编辑模式时,界面显示的是TextBox而非TextBlock,此时ElementStyle的规则不会作用到编辑状态的控件上,导致验证错误时ToolTip无法显示。红色边框能正常显示是因为DataGrid自带默认的错误视觉样式,不受此影响。

解决方案

需要同时为ElementStyle(非编辑状态)和EditingElementStyle(编辑状态)添加对应的ToolTip触发器,确保两种状态下都能正确显示ToolTip。

修改后的XAML代码

<DataGridTextColumn x:Name="clEditS_Name"
                    Header="Name (Editable)"
                    TextBlock.TextAlignment="Center"
                    Width="*">
    <DataGridTextColumn.Binding>
        <Binding Path="S_Name" 
             NotifyOnTargetUpdated="True" 
             UpdateSourceTrigger="PropertyChanged" 
             Mode="TwoWay"
             ValidatesOnDataErrors="True">
            <Binding.ValidationRules>
                <ui:ValidationClass />
            </Binding.ValidationRules>
        </Binding>
    </DataGridTextColumn.Binding>
    <!-- 非编辑状态样式 -->
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="ToolTip" Value="Invalid Name"/>
                </Trigger>
                <Trigger Property="Validation.HasError" Value="False" >
                    <Setter Property="ToolTip" Value="Correct Name"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>
    <!-- 编辑状态样式 -->
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="ToolTip" Value="Invalid Name"/>
                </Trigger>
                <Trigger Property="Validation.HasError" Value="False" >
                    <Setter Property="ToolTip" Value="Correct Name"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

优化方案(复用样式逻辑)

如果不想重复编写触发器逻辑,可以把验证相关的样式提取为共用资源:

<Window.Resources>
    <Style x:Key="ValidationToolTipStyle" TargetType="{x:Type FrameworkElement}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" Value="Invalid Name"/>
            </Trigger>
            <Trigger Property="Validation.HasError" Value="False" >
                <Setter Property="ToolTip" Value="Correct Name"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<!-- DataGridTextColumn部分 -->
<DataGridTextColumn x:Name="clEditS_Name"
                    Header="Name (Editable)"
                    TextBlock.TextAlignment="Center"
                    Width="*">
    <DataGridTextColumn.Binding>
        <!-- 绑定代码保持不变 -->
    </DataGridTextColumn.Binding>
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource ValidationToolTipStyle}"/>
    </DataGridTextColumn.ElementStyle>
    <DataGridTextColumn.EditingElementStyle>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ValidationToolTipStyle}"/>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>

验证说明

你的ValidationClass验证逻辑正常,无需修改,上述修改后无论单元格处于编辑还是非编辑状态,只要验证状态变化,ToolTip都会正确显示。

内容的提问来源于stack exchange,提问作者user3312266

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:35:40