Я долго искал, как получить доступ к динамически созданному элементу, даже нашел код:

public UIElement FindElement(string TagName, Panel p)
{
UIElement FoundEl = null;
foreach (UIElement el in p.Children)
{
if (((FrameworkElement)el).Tag is string)
if ((string)(((FrameworkElement)el).Tag) == TagName)
FoundEl = el;
if (FoundEl == null)
if (el is Panel)
{
UIElement result = FindElement(TagName, (Panel)el);
if (result != null)
FoundEl = result;
}
}
return FoundEl;
}


Код хороший, но не оптимизированный, темболее есть встроенная команда о которой я расскажу в своем примере:
продолжу статью «Web-службы WCF в Silverlight» С помощью сервиса мы получали текстовую строку «Hello,{0}! How are you?"» где {0} - имя, которое вы ввели в TextBox
Теперь мы не будем добавлять в Silverlight страницу, а создадим ее динамически
И так, код при нажатии на клавишу должен добавить динамический элемент «OutField», а при получении результата с сервиса записывается текст в только что добавленный элемент
Для этого делаем:
1. В обработчике клавиши добавим код:
private void CallService_Click(object sender, RoutedEventArgs e)
{
***Старый код***
TextBlock OutField = new TextBlock();
OutField.Name = "OutField";
OutField.Inlines.Add(“Полученный результат с сервера: ”);
LayoutRoot.Children.Add(OutField);
}

2. В методе proxy_TellMeSomethingCompleted заменим
OutField.Text = e.Result;
на
((TextBlock)LayoutRoot.FindName("OutField")).Inlines.Add(e.Result);


Если мы запустим наш пример и попробуем нажать на клавишу, то сначала появится Предложение “Полученный результат с сервера: ”, а потом добавится результат с сервера.


Дополнения:

Но не забудьте поставить размеры или положение для контрола OutField, так как посте создания, он занимает все пространство.

При создании контрола можно сделать проверку, чтобы при вторичном нажатии на кнопку невыводило ошибку:

if (LayoutRoot.FindName("OutField") == False)
{

}


Это сырой пример, но он показывает, как можно создать контрол, и управлять им уже вовремя работы программы, что добавляет в вашу программу немного динамичности…

0 коммент.:

Отправить комментарий