Перечислять элементы управления, объявленные внутри таблицы данных в коде? - PullRequest
1 голос
/ 14 июля 2009

Есть ли способ проверить содержимое DataTemplate в коде? Я хочу перечислить элементы управления в табличке с данными в поисках определенного типа.

Спасибо!

1 Ответ

0 голосов
/ 14 июля 2009

На мой взгляд, лучший (и рекомендуемый) способ - использовать XamlWriter / XamlReader с LINQ to XML. Например:

string templateXaml = XamlWriter.Save(template);

XElement xData = XElement.Parse(templateXaml);

XElement xpanel = xData.XPathSelectElements("//*[@IsItemsHost]").FirstOrDefault();

При этом будет найден элемент xaml с существующим атрибутом IsItemsHost.

Затем, если вы хотите программно проверить его как объект зависимости, преобразуйте его следующим образом:

Panel panel = (Panel) XamlReader.Parse(xpanel.ToString());

//example, discover which panel Type it actually is
Type panelType = panel.GetType();

EDIT

Кроме того, чтобы ответить на ваш вопрос напрямую, дополнительно вы должны написать код, подобный этому:

IEnumerable<XElement> typedElements = xData.XPathSelectElements("//SpecificType");

foreach(XElement el in typedElements)
{
    DependencyObject dObj = (DependencyObject) XamlReader.Parse(el.ToString());

    //do something with dObj
}
...