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 のようなプロパティがあり、それを true にするとそのセルが編集可能になります

ありがとう

于 2013-04-09T08:02:21.447 に答える