C# WPF:在IDataErrorInfo时显示自定义DataGrid单元格上的工具提示消息
我是WPF的新手,但在过去的几天里,我读了很多关于它和MVVM的文章。 MyWPF显示带有自定义列模板的DataGrid(使用Xceed WPF Toolkit中的NumericUpDown控件)。其中三列包含三维向量的十进制坐标。我使用IDataErrorInfo确保向量的长度永远不为0(所有三列不能同时为0)。到目前为止,它工作正常,当验证失败时,单元格被标记为红色,但我还想在工具提示或类似内容中显示错误消息C# WPF:在IDataErrorInfo时显示自定义DataGrid单元格上的工具提示消息,c#,wpf,validation,datagrid,idataerrorinfo,C#,Wpf,Validation,Datagrid,Idataerrorinfo,我是WPF的新手,但在过去的几天里,我读了很多关于它和MVVM的文章。 MyWPF显示带有自定义列模板的DataGrid(使用Xceed WPF Toolkit中的NumericUpDown控件)。其中三列包含三维向量的十进制坐标。我使用IDataErrorInfo确保向量的长度永远不为0(所有三列不能同时为0)。到目前为止,它工作正常,当验证失败时,单元格被标记为红色,但我还想在工具提示或类似内容中显示错误消息 <DataGrid [...]> <DataGrid.C
<DataGrid [...]>
<DataGrid.Columns>
[...]
<DataGridTemplateColumn Header="X" [...]>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:DecimalUpDown Value="{Binding PositionX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
</xctk:DecimalUpDown>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
[... and same thing for Y and Z]
</DataGrid.Columns>
</DataGrid>
[...]
[…Y和Z也是一样]
这是我被困的几个小时,所以我希望你能在这里帮助我:
如何在自定义模板列上显示错误工具提示?
我已经阅读了很多关于错误工具提示的文章和线程,但大多数都是关于纯文本框或DataGridTextColumns的,并且尝试了很多,但到目前为止都无法实现
其中大多数看起来像这样:
<Style x:Key="errorStyle" TargetType="{x:Type TextBox}">
<Setter Property="Padding" Value="-2"/>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="Red"/>
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
从这里开始:
一个或多个exsamples:
- 如何此样式触发器定义必须查找不包含文本框的单元格
- 其中定义必须是
- 如果列需要以某种方式引用此定义
谢谢大家! 如果附加的Validation.HasError属性返回true,则将控件的Style属性设置为带有触发器的样式,该触发器将在CellTemplate中设置控件的工具提示属性:
<DataGridTemplateColumn Header="X">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:DecimalUpDown Value="{Binding PositionX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}">
<xctk:DecimalUpDown.Style>
<Style TargetType="xctk:DecimalUpDown">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip" Value="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={RelativeSource Self}}" />
</Trigger>
</Style.Triggers>
</Style>
</xctk:DecimalUpDown.Style>
</xctk:DecimalUpDown>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
谢谢,非常好用!我知道我很接近,但只是没有风格等方面的经验。。。