如何以编程方式修改DataTemplate?

时间:2009-12-14 20:26:48

标签: silverlight xaml silverlight-3.0 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的方法。

谢谢,

1 个答案:

答案 0 :(得分:1)

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

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

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