我正在创建一个自定义工具提示,需要获取对另一个控件的引用。它与Storyboard.TargetName的工作方式非常相似。现在我已经推出了自己的实现方法来获取目标引用,例如(注意我的目标永远是ToolTip的父目标):
public object FindTarget(string targetName)
{
var target = default(object);
FrameworkElement item = this;
while ((item = item.Parent as FrameworkElement) != null && target == null)
target = item.FindName(targetName);
return target;
}
我的问题是有没有办法在框架中内置这个?这似乎是一个足够普遍的任务。
修改:
事实证明,上述算法实际上并不适用于ToolTips,因为它们的Parent属性始终为null。我假设ToolTips基于Popups,这就是Parent为空的原因。
答案 0 :(得分:-1)
您可以使用扩展方法在任何您想要的地方显示它:
public static object GetElementByName(this FrameworkElement baseElement, string name)
{
object target = null;
FrameworkElement item = baseElement;
while ((item = item.Parent as FrameworkElement) != null && target == null)
target = item.FindName(name);
return target;
}
在此之后,您可以在任何FrameworkElement上调用此方法。 虽然您应该知道FindName不适用于模板中定义的名称。