У меня есть приложение wpf, где я хочу, чтобы функциональность была похожа на ретранслятор. Я имею в виду следующий пост Ретранслятор wpf как контроль Итак, у меня есть список, который похож на источник элементов для ItemsControl. Я пытаюсь показать следующее:
Parent Content1
Child content1.Parent Content2
Child content2.So on....
Таким образом, родительский контент 1 и родительский контент 2 являются свойствами имен внутри объекта данных, а дочерний контент1 и дочерний контент2 подобны свойству значения внутри объекта данных.
Вот пример приложения, которое я создал, но я получаю исключение синтаксического анализа xaml, в котором говорится: «Добавление значения в коллекцию типа« System.Windows.Controls.UIElementCollection »вызвало исключение». Это всего лишь частичный xaml. Я новичок в управлении предметами. Пожалуйста помоги.
<ItemsControl
ItemsSource = "{Binding Path=AllItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content = "{Binding names}"></Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation = "Horizontal" Margin = "10">
<TextBlock
Text = "{Binding}"></TextBlock>
</StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Mainwindow.cs
public partial class MainWindow : Window
{
public List<Data> AllItems { get; set; }
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
Populate();
}
public void Populate()
{
AllItems = new List<Data>();
Data data = new Data();
data.names = "Parent Content1";
data.value = "Child Content1";
AllItems.Add(data);
Data data1 = new Data();
data1.names = "Parent Content2";
data1.value = "Child Content2";
AllItems.Add(data1);
}
}
public class Data
{
public string names { get; set; }
public string value { get; set; }
}





Нет необходимости устанавливать ItemsPanelTemplate, так как он по умолчанию использует StackPanel. Проблема здесь в том, что вы также добавляете TextBlock внутрь ItemsPanelTemplate. Удалите его, затем добавьте правильное форматирование данных в ItemTemplate.
<ItemsControl
ItemsSource = "{Binding Path=AllItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text = "{Binding names}"></TextBlock>
<TextBlock Text = "{Binding value}"></TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>