Как бы я go о создании некоторых ресурсов для определенного элемента управления в коде?
Этот шаблон данных определяет, как столбец представления списка должен представлять свое содержимое. Однако из-за специфической природы этого представления мне необходимо создать столбцы в коде, чтобы правильно назначать требуемые свойства. Это все работает хорошо, за исключением одного случая, когда я не нашел правильного способа назначения внутреннего шаблона данных элемента управления содержимым для словаря ресурсов элемента управления содержимым в коде (это необходимо, поскольку он изменяется в соответствии с типом привязки, представьте себе, другие шаблоны, определенные в «...»). Единственная часть, которую я пропускаю - это «перевод» <ContentControl.Resources>
с xaml.
<DataTemplate>
<ContentControl Content="{Binding}" Focusable="False">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type data:DataItem}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding FirstProperty}"/>
<Label Content=" - "/>
<TextBox Text="{Binding SecondProperty}"/>
</StackPanel>
</DataTemplate>
...
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
Вот код cs, который у меня есть:
private DataTemplate GenerateSomeTemplate()
{
DataTemplate template = new DataTemplate(typeof(TextBlock));
FrameworkElementFactory contentElement = new FrameworkElementFactory(typeof(ContentControl));
template.VisualTree = contentElement;
contentElement.SetBinding(ContentControl.ContentProperty, new Binding() { }); // Might be wrong
contentElement.SetValue(ContentControl.FocusableProperty, false);
var displayTemplate = new DataTemplate(typeof(DataItem));
var layout = new FrameworkElementFactory(typeof(StackPanel));
var textBoxFirst = new FrameworkElementFactory(typeof(TextBox));
textBoxFirst.SetBinding(TextBox.TextProperty, new Binding() { Path = new PropertyPath("FirstProperty") });
layout.AppendChild(textBoxFirst);
var dashLabel = new FrameworkElementFactory(typeof(Label));
dashLabel.SetValue(Label.ContentProperty, " - ");
layout.AppendChild(dashLabel);
var textBoxSecond = new FrameworkElementFactory(typeof(TextBox));
textBoxFirst.SetBinding(TextBox.TextProperty, new Binding() { Path = new PropertyPath("SecondProperty") });
layout.AppendChild(textBoxSecond);
displayTemplate.VisualTree = layout;
// contentElement.AddResource(displayTemplate); // I need something like this...
return template;
}