我已声明以下扩展方法:
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
。
为什么扩展方法不可用?
答案 0 :(得分:5)
这不是扩展方法。这只是一种静态方法。要使其成为扩展方法,您需要在参数:
上使用this
关键字
public static T FindAncestor<T>(this DependencyObject obj)
另外,正如@Jonathan在下面提醒的那样,扩展方法需要在静态类中,所以请确保代码中的情况。
有关详细信息,请参阅有关扩展方法的MSDN documentation。