【问题标题】:How to get datagrid cell object form its template field wpf如何从其模板字段wpf中获取datagrid单元对象
【发布时间】:2013-04-01 03:36:16
【问题描述】:

以下是我正在使用的示例代码。我为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
    }
}

谢谢。

【问题讨论】:

    标签: c# wpf validation datagrid datatemplate


    【解决方案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 这样的属性,使该单元格可编辑

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2011-12-22
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多