Storyboard.TargetName是如何实现的?

时间:2012-01-13 00:09:42

标签: silverlight custom-controls

我正在创建一个自定义工具提示,需要获取对另一个控件的引用。它与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为空的原因。

1 个答案:

答案 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不适用于模板中定义的名称。