我有一个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>
所需效果 这显示了数据网格外的文本框
答案 0 :(得分:0)
删除TextBox的宽度,并将HorizontalAlignment更改为Stretch。