Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:在IDataErrorInfo时显示自定义DataGrid单元格上的工具提示消息_C#_Wpf_Validation_Datagrid_Idataerrorinfo - Fatal编程技术网

C# WPF:在IDataErrorInfo时显示自定义DataGrid单元格上的工具提示消息

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

我是WPF的新手,但在过去的几天里,我读了很多关于它和MVVM的文章。 MyWPF显示带有自定义列模板的DataGrid(使用Xceed WPF Toolkit中的NumericUpDown控件)。其中三列包含三维向量的十进制坐标。我使用IDataErrorInfo确保向量的长度永远不为0(所有三列不能同时为0)。到目前为止,它工作正常,当验证失败时,单元格被标记为红色,但我还想在工具提示或类似内容中显示错误消息

<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>

谢谢,非常好用!我知道我很接近,但只是没有风格等方面的经验。。。