我需要将数据模板包装在运行时构建的数据模板中。包装的数据模板是 WPF 元素,因为包装模板需要在代码中创建。就像是:
public DataTemplate GetTemplate(DataTemplate template)
{
string xaml = string.Format(@"
<DataTemplate>
<ContentControl Content=""{{Binding}}"">
<ContentControl.ContentTemplate>
{0}
</ContentControl.ContentTemplate>
</ContentControl>
</DataTemplate>", template);
return CreateTemplate(xaml);
}
显然我的数据模板比我上面使用的更复杂。
无论如何,我都不知道要采用现有的 xaml 元素并将其转换为字符串。似乎我可以使用 FrameworkElementFactory 但我看到它被贬低了,这让我觉得我错过了一些明显的东西。
已编辑---
我正在做的是创建一个用户将提供数据模板的控件,但我需要对模板进行更改。也许这个例子会更有意义......
public DataTemplate GetTemplate2()
{
// this template would be supplied by the user
// I'm creating it here as an example
string t = string.Format(@"
<DataTemplate>
<TextBlock Text=""{{Binding Value}}""/>
</DataTemplate>");
T = CreateTemplate(t);
string xaml = string.Format(@"
<DataTemplate>
<ContentControl Content=""{{Binding}}"">
<ContentControl.ContentTemplate>
{0}
</ContentControl.ContentTemplate>
</ContentControl>
</DataTemplate>", t);
return CreateTemplate(xaml);
}
这一切都有效,因为我使用的是字符串模板(例如 t)。但是我需要想办法用实际的DataTemplate(例如T)来做这件事。不幸的是,XamlWriter 无法处理 Binding。