扩展方法有问题

时间:2011-08-25 13:48:37

标签: c# silverlight silverlight-4.0 extension-methods

我已声明以下扩展方法:

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 个答案:

答案 0 :(得分:5)

这不是扩展方法。这只是一种静态方法。要使其成为扩展方法,您需要在参数:

上使用this关键字
public static T FindAncestor<T>(this DependencyObject obj)

另外,正如@Jonathan在下面提醒的那样,扩展方法需要在静态类中,所以请确保代码中的情况。

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