0

下面是我正在使用的示例代码。我已经为TextBox被调用创建了附加属性ErrorMessageServce.ErrorMessage。每当ValidationError填充 时,它都会调用 的属性更改事件ErrorMessageService

从那里我想要的是,如果出现错误,我想突出显示该特定单元格。所以我想去做ErrorMessageServicePropertyChanged,但在那里我得到了TextBox反对。

所以问题是:

1) 如何从该文本框对象中获取 Datagridcell;

或者:

2)如何突出显示该特定单元格;

3)如何在编辑模式下显示特定的单元格(即应该显示文本框)

XAML:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Grid.Column="1" 
                Width="150" Height="25">
            </TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>

    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Grid.Column="1" Style="{DynamicResource ValidatingTextBox}"  
                x:Name="NameText" Text="{Binding CompanyName,ValidatesOnDataErrors=True,ValidatesOnExceptions=True}" App:ErrorMessageService.ErrorMessage="{Binding ValidationResult,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="150" Height="25">
            </TextBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

ErrorMessageService

public static class ErrorMessageService
{       
    public static readonly DependencyProperty ValidationErrorProperty =
        DependencyProperty.RegisterAttached("ErrorMessage", typeof(ValidationResult), typeof(ErrorMessageService),
       new FrameworkPropertyMetadata(default(ValidationResult), ErrorMessageServicePropertyChanged));

    public static ValidationResult GetErrorMessage(Control control)
    {
        return (ValidationResult)control.GetValue(ValidationErrorProperty);
    }

    public static void SetErrorMessage(Control control, object value)
    {
        control.SetValue(ValidationErrorProperty, value);
    }      

    private static void ErrorMessageServicePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
       //here i am getting d as textbox , from this how to get datagridcell object , so that i can highlight
    }
}

谢谢。

4

1 回答 1

1

我已经尝试了以下方法,并且从单元格编辑模板内的文本框中获取 Datagridcell 对象效果很好。我想它也可能对其他人有帮助

  public static T FindAncestor<T>(DependencyObject dependencyObject)
        where T : class
     {
        DependencyObject target = dependencyObject;
        do
        {
            target = VisualTreeHelper.GetParent(target);
        }
        while (target != null && !(target is T));
        return target as T;
       }

获得 DatagridCellobject 后,它具有 IsEdit 之类的属性,使该单元格可编辑

谢谢

于 2013-04-09T08:02:21.447 回答