実行時に構築されるデータ テンプレートにデータ テンプレートをラップする必要があります。ラップされたデータ テンプレートは 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 を処理できません。