Найти элемент управления WPF по имени
Я немного помогу найти лучший способ обратиться к элементам управления, которые были запрограммированы в С#
Если я предварительно включил метку в 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;
Спасибо
Ответы
Ответ 1
Как минимум два способа сделать это:
-
Используйте метод FindName
родительского контейнера, чтобы найти элемент управления: http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname(v=vs.110).aspx (но он будет внутренне включать цикл, например, visualtreehelper )
-
Создайте словарь для хранения ссылки для каждого создаваемого элемента управления
var controls = new Dictionary<string, FrameworkElement>();
controls.Add("_marketInfo5", lbl);
Затем вы можете сделать:
controls["_marketInfo5"].Tag = timeNow;
Ответ 2
Вы можете использовать XamlQuery для поиска ваших элементов управления во время выполнения. XamlQuery В CodePlex
XamlQuery.Search(RegisterGrid, "Label[Name=_marketInfo5]").SetValue(Control.TagProperty, timeNow);