silverlight – 如何以编程方式修改DataTemplate?

我正在尝试以编程方式将事件和元素添加到Silverlight 3.0应用程序中的DataTemplate.我有一个带有依赖项属性的用户控件,我想在其中设置模板,调整它,然后将修改后的版本设置为内部控件.

我的想法是采用进来的DataTemplate,读取它的XAML,然后使用XamlReader创建一个可以设置为内部控件的修改后的DataTemplate.这种方法的问题是我不知道如何从原始模板中获取XAML(如果它甚至可能.)例如:

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的方法.

谢谢,

解决方法

您无法通过代码操作模板(请参阅 FrameworkTemplate的文档).你最接近的是调用DataTemplate的LoadContent来创建包含Xaml的实例,但是你不能使用它来操作内容,并且Silverlight内部无法再将UIElement转换回Xaml.

我认为你可以得到的最接近的是使你的依赖对象成为一个指向包含初始DataTemplate的Xaml资源的Uri.

然后,您可以将此资源加载到XDocument中并将其作为XML进行操作.随后,您可以使用XamlReader实例化DataTemplate并将其分配给ItemTemplate.

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...