我有一个WPF DataGrid,它显示实现IDataErrorInfo的类型。正如预期的那样,当验证失败时,行会获得红色感叹号,无效的单元格将获得红色突出显示。
这一切都很好;但是,我希望验证错误消息显示在无效单元格的工具提示中,以便用户有一些错误的指示。我现在有:
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors[0].ErrorContent}"/>
</Style>
</DataGrid.CellStyle>
此方法适用于TextBox
,但不适用于DataGridCell
。有什么区别?
答案 0 :(得分:7)
我现在正在进行的项目中有类似的东西,它就是这样的:
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="DataGridCell.ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Style>
</DataGridTextColumn.ElementStyle>
答案 1 :(得分:2)
看一下这篇MSDN日志文章:
https://blogs.msdn.microsoft.com/bethmassi/2008/06/27/displaying-data-validation-messages-in-wpf/
按照其说明创建一个文本框单元格编辑模板,如下所示:
<Style TargetType="TextBox" x:Key="errTemplate">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
然后,您可以通过设置EditingElementStyle来在数据网格中使用它,如下所示:
<DataGridTextColumn Header="Variable"
Binding="{Binding Variable, ValidatesOnDataErrors=True}"
EditingElementStyle="{StaticResource errTemplate}"/>
使用数据触发器非常重要,这样当出现错误时,您可以支持标准工具提示和工具提示,如本文所述: