如何在代码中创建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>"
);
}
这非常好用,并允许我动态更改绑定。
答案 0 :(得分:39)
虽然您无法以编程方式创建它,但您可以使用以下代码从XAML字符串加载它:
public static DataTemplate Create(Type type)
{
return (DataTemplate) XamlReader.Load(
@"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007"">
<" + type.Name + @"/>
</DataTemplate>"
);
}
上面的代码片段创建了一个包含单个控件的数据模板,该控件可能是一个包含所需内容的用户控件。
答案 1 :(得分:11)
我对这段代码有一些问题,找不到元素的异常。仅供参考,我需要在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);
}
答案 2 :(得分:4)
是的,Silverligt 4早于WPF的当前版本。 当您添加模板作为资源时,就像我一样 我在ResourceDictionary之间的Application.xaml MergedResources中添加了一个userControl模板。 在XAML中,如果标记实现了IDictionary,则可以使用x:Key属性。像那样
<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脚本中添加一些值元素。我们创建了自己的usercontrols,它有一些DependencyObjectProperty属性......
最后如果你的对象没有继承,即。不是MyControl:UserControl您可以通过这种方式继承 MyObject:DependencyObject ,通过调用Application.Current.Resources.FirstChilderen ...
来访问您的对象FindName仅适用于WPF
答案 3 :(得分:2)
定义用于创建数据模板的内容的XAML用法不会作为可设置属性公开。它是构建在DataTemplate对象元素的XAML处理中的特殊行为。