数据网格模板列文本框验证错误模板

时间:2015-11-24 12:59:23

标签: c# wpf validation datagrid

我有一个WPF Datagrid,它有几列,其中一列包含一个文本框。

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

验证效果很好。

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

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

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

我已尝试在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>

当前效应 enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:0)

删除TextBox的宽度,并将Horizo​​ntalAlignment更改为Stretch。