扩展方法有问题

use*_*618 3 c# silverlight extension-methods silverlight-4.0

我已经声明了以下扩展方法:

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);
}
Run Code Online (Sandbox Code Playgroud)

它似乎不适用于TextBlock:

var csiPage = (sender as TextBlock).FindAncestor<NotebookPageView>();
Run Code Online (Sandbox Code Playgroud)

NotebookPageView继承自UserControl.

为什么扩展方法不可用?

Fis*_*rdo 5

那不是扩展方法.这只是一种静态方法.要使其成为扩展方法,您需要在this参数上使用关键字:

public static T FindAncestor<T>(this DependencyObject obj)
Run Code Online (Sandbox Code Playgroud)

另外,正如@Jonathan在下面提到的,扩展方法需要在静态类中,因此请确保代码中的情况.

有关详细信息,请参阅有关扩展方法的MSDN文档.