2012-01-13 157 views
0

我正在创建一个需要获取对另一个控件的引用的自定义工具提示。这与Storyboard.TargetName的工作方式非常相似。现在我滚我自己如何获得目标的参考,如执行(请注意,我的目标永远是工具提示的父):Storyboard.TargetName如何实现?

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; 
} 

我的问题是,有没有办法可以做到这一点的内置于框架?看起来这是一个普通的任务。

编辑

原来上面的算法实际上并没有对工具提示的工作,因为他们的父母财产总是空。我假设工具提示基于弹出窗口,这就是为什么父母为空。

回答

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

+0

没错,但这不是关于扩展方法的问题。我只是希望有这样做的方式。不是因为我想在任何地方都使用它,但我不想重复可能已经实现的某些东西,或者正确处理我还没有考虑过的边缘情况。 – xanadont 2012-01-13 15:59:45