我正在尝试以编程方式将事件和元素添加到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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。