2012-09-02 117 views
15

WPF控件我經過一些幫助尋找最好的方式是指已programmtically建在C#查找名稱

控制如果我預先包括XAML標記,並命名爲marketInfo然後在代碼中,我可以設置Tag屬性的東西,如

marketInfo.Tag = timeNow; 

不過,我建立控制和分配每一個使用類似的名稱,以

System.Windows.Controls.Label lbl = new System.Windows.Controls.Label(); 
lbl.Content = market.name + " - " + DateTime.Now.ToLocalTime().ToLongTimeString(); 
lbl.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Left; 
lbl.Height = 40; 
lbl.Name = @"_" + "marketInfo" + countMarket; 

如何從其他方法引用這些控件?我讀過一些建議使用visualtreehelper的帖子,但這似乎需要循環控制來找到特定的控件。有沒有辦法通過名稱訪問控件以避免循環?

類似

//pseudo code 
SomeControl("_marketInfo5").Tag = timeNow; 

如一些感謝您

回答

32

有至少兩種方法可以做到這一點:

+0

字典是一種比遞歸更好的方法,特別是因爲我需要的控件都是兒童幾層深。我應該想到那個。謝謝。 – user3357963

+3

這是一個很棒的提示,它不適合我,但它讓我知道做了什麼。我不得不使用'control.Template.FindName(「name」)'來獲得我需要的孩子。 – Fred

0

可以使用XamlQuery在運行時查找您的控件。 XamlQuery In CodePlex

XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);