2012-01-13 155 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