【问题标题】:Datagrid Template Column Textbox Validation Error TemplateDatagrid 模板列文本框验证错误模板
【发布时间】:2016-02-26 22:29:16
【问题描述】:

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

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

验证工作完美。

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

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

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

我尝试在数据网格单元、行和数据网格本身上设置“Validation.ErrorTemplate="{x:Null}"" 但无济于事。

似乎数据网格说“我在这一行中有一个无效的控件,因此整行必须是无效的”,而我只是希望控件显示为无效。

有人可以帮我解决这个问题吗?

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>

当前效果

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

【问题讨论】:

    标签: c# wpf validation datagrid


    【解决方案1】:

    移除 TextBox 的 Width,并将 Horizo​​ntalAlignment 更改为 Stretch。

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 1970-01-01
      • 2016-12-03
      • 2018-06-03
      • 2016-07-11
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多