C# Datagrid模板列文本框验证错误模板

C# Datagrid模板列文本框验证错误模板,c#,wpf,validation,datagrid,C#,Wpf,Validation,Datagrid,我有一个WPF数据网格,它有几列,其中一列包含一个文本框 此文本框绑定到执行验证的视图模型中的值 验证非常有效 我有一个样式,允许用户将鼠标悬停在文本框上,并将错误显示为工具提示,并且在文本框周围保留标准的红色边框 当此文本框不在数据网格内时,它与验证完美配合,导致文本框的边框变为红色 但是,当数据网格列的一部分出现时,它似乎将整行的边框设置为红色 我尝试在datagridcell、行和数据网格本身上设置“Validation.ErrorTemplate=“{x:Null}”,但没有效果 看起来

我有一个WPF数据网格,它有几列,其中一列包含一个文本框

此文本框绑定到执行验证的视图模型中的值

验证非常有效

我有一个样式,允许用户将鼠标悬停在文本框上,并将错误显示为工具提示,并且在文本框周围保留标准的红色边框

当此文本框不在数据网格内时,它与验证完美配合,导致文本框的边框变为红色

但是,当数据网格列的一部分出现时,它似乎将整行的边框设置为红色

我尝试在datagridcell、行和数据网格本身上设置“Validation.ErrorTemplate=“{x:Null}”,但没有效果

看起来datagrid说“我在这一行中有一个无效的控件,因此整行都必须无效”,而我只希望该控件显示为无效

有人能帮我完成这件事吗

XAML

 <DataGridTemplateColumn Width="*">
                            <DataGridTemplateColumn.HeaderTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{x:Static languages:Strings.FullNameColumnTitle}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.HeaderTemplate>

                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox Width="300"
                                             HorizontalAlignment="Left"
                                             Style="{StaticResource DataGridEditableFieldTextBoxStyle}"
                                             Text="{Binding FullName,
                                                            Mode=TwoWay,
                                                            UpdateSourceTrigger=LostFocus,
                                                            NotifyOnValidationError=True,
                                                            ValidatesOnNotifyDataErrors=True}" />

                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>

文本框样式

 <!--  A style that makes the text box look like a text block until it has keyboard focus  -->
    <Style x:Key="DataGridEditableFieldTextBoxStyle"
           BasedOn="{StaticResource NormalTextBoxStyle}"
           TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocused" Value="True">
                <Setter Property="Background" Value="{StaticResource CreamBrush}" />
                <Setter Property="Margin" Value="5" />
                <Setter Property="Foreground" Value="{StaticResource BlackBrush}" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="False">
                <Setter Property="Background" Value="Transparent" />
                <Setter Property="Foreground" Value="{StaticResource CreamBrush}" />
                <Setter Property="Margin" Value="5" />
                <Setter Property="BorderThickness" Value="0" />
            </Trigger>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors).CurrentItem.ErrorContent, Converter={StaticResource ErrorCodeConverter}}" />
            </Trigger>
        </Style.Triggers>
    </Style>

当前效应

所需效果 这将显示数据网格外部的文本框


删除文本框的宽度,并将水平对齐更改为拉伸