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
相关产品推荐
相关产品推荐

