用代码创建Silverlight DataTemplate

时间:2020-03-05 18:52:22  来源:igfitidea点击:

如何在代码中创建Silverlight数据模板?我已经看到了很多WPF的示例,但对于Silverlight却没有。

编辑:这是基于以下圣地亚哥的答案,我现在正在使用的代码。

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

这确实非常好用,并且允许我随时更改绑定。

解决方案

回答

来自MSDN的引用:

The XAML usage that defines the content for creating a data template is not exposed as a settable property. It is special behavior built into the XAML processing of a DataTemplate object element.

回答

尽管无法以编程方式创建它,但是可以从XAML字符串中以如下代码加载它:

public static DataTemplate Create(Type type)
    {
        return (DataTemplate) XamlReader.Load(
            @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/client/2007"">
                <" + type.Name + @"/>
              </DataTemplate>"
          );
    }

上面的代码段创建了一个包含单个控件的数据模板,该控件可以是具有所需内容的用户控件。

回答

我在这段代码中遇到了一些问题,使元素没有出现异常。仅供参考,是我需要在DataTemplate中包含我的命名空间...

private DataTemplate Create(Type type)
        {
            string xaml = @"<DataTemplate 
                xmlns=""http://schemas.microsoft.com/client/2007""
                xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @""">
                <controls:" + type.Name + @"/></DataTemplate>";
            return (DataTemplate)XamlReader.Load(xaml);
        }