Проблема с методом расширения - PullRequest
3 голосов
/ 25 августа 2011

Я объявил следующий метод расширения:

public static T FindAncestor<T>(DependencyObject obj) where T : DependencyObject
{
    while (obj != null)
    {
        T o = obj as T;
        if (o != null)
        {
            return o;
        }
        obj = VisualTreeHelper.GetParent(obj);
    }
    return null;
}

[System.Runtime.CompilerServices.Extension()]
public static T FindAncestor<T>(UIElement obj) where T : UIElement
{
    return FindAncestor<T>((DependencyObject)obj);
}

Кажется, он не работает с TextBlock:

var csiPage = (sender as TextBlock).FindAncestor<NotebookPageView>();

NotebookPageView наследуется от UserControl.

Почему метод расширения недоступен?

1 Ответ

5 голосов
/ 25 августа 2011

Это не метод расширения.Это просто статический метод.Чтобы сделать его методом расширения, вам нужно использовать ключевое слово this для параметра:

public static T FindAncestor<T>(this DependencyObject obj)

Кроме того, как @Jonathan напоминает ниже, методы расширения должны быть в статическом классе, поэтому убедитесь, чторегистр в вашем коде.

Для получения дополнительной информации см. документацию MSDN о методах расширения.

...