Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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_C#_Wpf - Fatal编程技术网

C# WPF数据网格样式错误IDataErrorInfo

C# WPF数据网格样式错误IDataErrorInfo,c#,wpf,C#,Wpf,我使用的是MVVM,有一个datagrid,其中有一个可编辑的列,我正在对其进行验证: <DataGridTemplateColumn Header="Key" Width="80"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Bindi

我使用的是MVVM,有一个datagrid,其中有一个可编辑的列,我正在对其进行验证:

<DataGridTemplateColumn Header="Key" Width="80">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Key}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <vw:NumericTextBox Text="{Binding Key, Mode=TwoWay,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>

我加入了一个样式,将错误显示为工具提示:

<Style TargetType="{x:Type DataGridCell}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

因此,将启动验证,单元格将以红色显示,并显示错误消息工具提示


我有两个问题,首先,当用户单击单元格外时,单元格仍保持红色轮廓,但悬停在上方时工具提示不显示。我怎样才能让它工作?第二个问题是在我不想要的行旁边有一个橙色感叹号。我假设这是因为网格或行上的某些默认样式。如何去除它(红色轮廓很好)?

要删除感叹号,必须像下面这样编辑datagrid行样式:

<DataGrid ...> 
<DataGrid.RowStyle> 
    <Style TargetType="DataGridRow"> 
        <Setter Property="ValidationErrorTemplate" Value="{x:Null}"/> 
    </Style> 
</DataGrid.RowStyle> 
<!-- ... --> 
</DataGrid> 

对于第一部分-要在悬停时显示错误,还需要为TextBlock目标类型设置工具提示属性。我使用以下两种样式在datagrid单元格编辑和悬停中显示来自IDataErrorInfo的错误

<Style x:Key="EditCellStyleError" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style x:Key="CellStyleError" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="true">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
            </Trigger>
        </Style.Triggers>
    </Style>

为datagrid设置这些样式

<DataGridTextColumn .....
EditingElementStyle="{StaticResource EditCellStyleError}" ElementStyle="{StaticResource CellStyleError}"
</DataGridTextColumn>

爱德华多回答了第二部分,谢谢你。对于工具提示,我最终将TextBlock的工具提示属性绑定到验证错误,并删除了上面针对datagridcell的样式。我确实尝试过使用TargetType为TextBlock的样式,但没有显示工具提示。我想我可能需要将相对源设置为不同的东西,但我不知道是什么。