扩展法的问题
本文关键字:问题 扩展 | 更新日期: 2023-09-27 18:06:34
我声明了以下扩展方法:
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
。
为什么扩展方法不可用?
这不是一个扩展方法。它只是一个静态方法。要使它成为一个扩展方法,您需要在参数上使用this
关键字:
public static T FindAncestor<T>(this DependencyObject obj)
另外,正如@Jonathan下面提醒的,扩展方法需要在静态类中,所以要确保在你的代码中是这样的。
有关更多信息,请参阅MSDN关于扩展方法的文档