用代码创建Silverlight DataTemplate

用代码创建Silverlight DataTemplate

Creating a Silverlight DataTemplate in code

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

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

1
2
3
4
5
6
7
8
9
public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding" + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

这非常好用,可以让我随时更改绑定。


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

1
2
3
4
5
6
7
8
9
    public static DataTemplate Create(Type type)
    {
        return (DataTemplate) XamlReader.Load(
            @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/client/2007"">
                <" + type.Name + @"/>
              </DataTemplate>"
          );
    }

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


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

中包含我的命名空间。

1
2
3
4
5
6
7
8
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);
        }

是的,Silverligt 4比WPF的当前版本早。
当您将模板添加为资源时,即像我一样
我在ResourceDictionary之间的Application.xaml MergedResources中添加了一个userControl模板。
在XAML中,如果标记实现了IDictionary,则可以使用x:Key属性。像这样

1
2
3
4
5
   <ResourceDictionary>
    <DataTemplate x:Key="TextBoxEditTemplate">
    <Some user control x:Name="myOwnControl" />
    </DataTemplate>
   </ResourceDictionary>

好!您可以通过编码Application.Current.resources [" TextBoxEditTemplate"]来访问模板
另一方面,用于查找此模板成员的某些方法将不起作用。在此DataTemplate旁边没有实现IDictionary,因此您不能为此dataTemplate中的项目分配x:Key属性。作为示例中的myOwnControl。

在没有xaml的情况下,当前的Silverlight在创建完全动态代码隐藏的DataTemplates方面有一些限制。即使在WPF上也可以使用。

无论如何,到目前为止最好的解决方案是为datatemplate创建XAML脚本,您可以在DataTemplate脚本中添加一些values元素。我们创建了自己的usercontrols,它具有DependencyObjectProperty ...

的某些属性。

最后,如果您的对象没有继承,即不是MyControl:UserControl,您可以通过这种方式继承MyObject:DependencyObject,这样您就可以通过调用Application.Current.Resources.FirstChilderen ...

FindName仅在WPF中起作用


来自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.


推荐阅读

    linux创建命令简写?

    linux创建命令简写?,系统,数据,命令,文件,环境,档案,位置,文件夹,目录,终端,L

    linux命令创建pkg?

    linux命令创建pkg?,名称,文件,命令,系统,首次,数据,位置,不了,时间,名字,linu

    linux克隆代码命令?

    linux克隆代码命令?,系统,代码,文件,命令,目录,源文件,文件夹,路径,目标,表

    linux创建硬链接命令?

    linux创建硬链接命令?,数据,系统,链接,地方,信息,文件,概念,时间,位置,工作,L

    linux创建系列命令?

    linux创建系列命令?,名字,命令,文件,文件夹,代码,名称,电脑,地址,系统,密码,l

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    linux命令创建用户组?

    linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管

    linux命令创建用户组?

    linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管

    linux创建主机名命令?

    linux创建主机名命令?,工作,地址,系统,信息,名称,命令,目录,发行,查询系统,

    linux控制台创建命令?

    linux控制台创建命令?,工作,地址,系统,命令,信息,目录,管理,名字,文件,控制

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux命令行调试代码?

    linux命令行调试代码?,环境,代码,信息,平台,程序,编辑,版本,步骤,体系结构,

    创建自定义命令linux?

    创建自定义命令linux?,工具,状态,命令,系统,代码,标准,数据,位置,电脑,材料,L

    linux编译源代码命令?

    linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

    linux命令提交代码?

    linux命令提交代码?,工作,系统,地址,代码,命令,数据,信息,目录,标准,发行,求

    linux命令如何创建与?

    linux命令如何创建与?,名字,文件,命令,名称,系统,密码,首次,文件名,终端,文

    linux代码同步命令?

    linux代码同步命令?,时间,服务,系统,地址,代码,网络,通信,图片,风险,管理,lin

    linux命令错误代码?

    linux命令错误代码?,系统,密码,电脑,网络,手机,网址,软件,代码,设备,老板,Lin