Silverlight 如何以编程方式修改数据模板?
我正在尝试以编程方式向Silverlight 3.0应用程序中的DataTemplate添加事件和元素。我有一个带有dependency属性的用户控件,我希望获取已设置的模板,对其进行调整,然后将修改后的版本设置为内部控件 我的想法是获取传入的DataTemplate,读取其XAML,调整它,然后使用XamlReader创建修改后的DataTemplate,然后将其设置为内部控件。这种方法的问题是我不知道如何从原始模板获取XAML(如果可能的话)。例如:Silverlight 如何以编程方式修改数据模板?,silverlight,xaml,silverlight-3.0,datatemplate,Silverlight,Xaml,Silverlight 3.0,Datatemplate,我正在尝试以编程方式向Silverlight 3.0应用程序中的DataTemplate添加事件和元素。我有一个带有dependency属性的用户控件,我希望获取已设置的模板,对其进行调整,然后将修改后的版本设置为内部控件 我的想法是获取传入的DataTemplate,读取其XAML,调整它,然后使用XamlReader创建修改后的DataTemplate,然后将其设置为内部控件。这种方法的问题是我不知道如何从原始模板获取XAML(如果可能的话)。例如: protected virtual vo
protected virtual void OnItemTemplateChanged(DependencyPropertyChangedEventArgs e)
{
// Get the original Xaml from the set template
//string originalXaml = ???
// Modify the template
string newXaml = originalXaml.Replace("foo", "bar"); // for example
// Create a new template from the modified XAML
DataTemplate newTemplate = (DataTemplate)XamlReader.Load(newXaml);
// Update the inner template
this._childDropdown.ItemTemplate = newTemplate;
}
是否有人知道:1)是否有方法读取原始XAML,或2)以编程方式修改数据模板的另一种方法
谢谢,您无法通过代码操作模板(有关详细信息,请参阅文档)。最接近的方法是调用DataTemplate的
LoadContent
来创建所包含Xaml的实例,但不能使用该实例来操作内容,Silverlight内部也无法将UIElement
再次转换回Xaml
我认为您可以得到的最接近的方法是将依赖项对象设置为指向包含初始数据模板的Xaml资源的Uri
然后,您可以将此资源加载到
XDocument
中,并将其作为XML进行操作。随后,您可以使用XamlReader
来实例化DataTemplate
,并将其分配给itemtplate
I(不情愿地)重写了我的项目,这样它就不需要操纵DataTemplate。这不是我想要的,但至少我不会再浪费时间去做这件事了。谢谢,我希望Silverlight的未来版本允许对DataTemplate进行一些编程操作。我想我希望看到的是用自定义生成器替换ItemsControl ItemContainerGenerator的能力,我们目前无法做到这一点,我必须查看SL4,看看它是否允许这样做。