1

有没有办法在代码中检查 DataTemplate 的内容?我想列出数据模板中的控件,寻找特定类型。

谢谢!

4

1 回答 1

0

在我看来,最好的(也是推荐的)方法是将 XamlWriter/XamlReader 与 LINQ to XML 一起使用。例如:

string templateXaml = XamlWriter.Save(template);

XElement xData = XElement.Parse(templateXaml);

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

这将找到具有现有 IsItemsHost 属性的 xaml 元素。

然后,如果您想以编程方式将其作为依赖对象进行检查,请将其转换为:

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

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

编辑

此外,要直接回答您的问题,您还可以编写如下代码:

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

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

    //do something with dObj
}
于 2009-07-13T20:06:40.400 回答