在DataGridCell的工具提示中显示验证错误

7

我有一个WPF DataGrid,显示实现了IDataErrorInfo接口的类型。当验证失败时,行会出现红色感叹号,无效单元格会有红色高亮。

enter image description here

这些都很好;然而,我希望验证错误消息能够显示在无效单元格的工具提示中,以便用户知道出了什么问题。目前我已经做到:

<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
        <Setter Property="ToolTip"
                Value="{Binding RelativeSource={RelativeSource Self},
                                                Path=(Validation.Errors[0].ErrorContent}"/>
     </Style>
</DataGrid.CellStyle>

这种方法适用于 TextBox,但不适用于 DataGridCell。那么它们之间有什么区别呢?

2个回答

13

我最近在一个项目中遇到了类似的情况,我的解决方案如下:

<DataGridTextColumn.ElementStyle>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="DataGridCell.ToolTip"
                Value="{Binding RelativeSource={RelativeSource Self},
                                                Path=(Validation.Errors)[0].ErrorContent}"/>
     </Style>
</DataGridTextColumn.ElementStyle>

笔误 - 应为:Path=(Validation.Errors)[0].ErrorContent - surfen

6

请看这篇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}"/>

使用数据触发器非常重要,这样你就可以支持标准的工具提示和错误提示工具提示。在这篇文章中解释了为什么需要这样做:

没有验证错误时不显示工具提示 WPF


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接