Привязка данных WPF ItemsControl — добавление дополнительных начальных элементов управления
-
03-07-2019 - |
Вопрос
У меня есть следующий XAML для элемента управления элементами с привязкой к данным, который отображает список групп с меткой и кнопкой для добавления новой группы, появляющейся первой:
<WrapPanel Orientation="Horizontal">
<Label Content="Groups" />
<Button x:Name="btnGroupAdd" Click="btnGroupAdd_Click" Content="+" />
<ItemsControl ItemsSource="{Binding}" x:Name="_groupList" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal">
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Padding="3" BorderThickness="1">
<WrapPanel>
<CheckBox x:Name="_groupEnabled" Click="GroupEnabled_Click" IsChecked="{Binding Path=Checked}">
<TextBlock x:Name="_groupName" Text="{Binding Path=Group.Name}" ></TextBlock>
</CheckBox>
<Button x:Name="_deleteGroup" FontStyle="Normal" Click="DeleteGroup_Click" />
</WrapPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
При небольшом количестве групп все отображается в одной строке.
Группы + Группа1 Группа2 Группа3
Когда я добавляю больше групп, панель переноса, содержащая элементы, переносится, но исходная метка и кнопка для добавления новой группы находятся в отдельной строке, а группы с привязкой к данным начинаются со следующей строки.
Группы +
Группа1 Группа2 Группа3 Группа4
Группа5
Я могу понять, почему это происходит, поскольку панели переноса вложены.Мой вопрос:как включить первую метку и кнопку во внутреннюю панель переноса, чтобы они не находились в отдельной строке?
Группы + Группа1 Группа2 Группа3
Группа4 Группа5
Решение
Если вас это устраивает:
Группы + Группа1 Группа2 Группа3
Группа4 Группа5
Тогда я бы предложил использовать внешний Grid
и внутренний WrapPanel
.В противном случае ваши варианты:
- Включите другие элементы управления (
Label
иButton
) или модель представления, воспроизводящую эти элементы управления в коллекции, к которой вы привязываетесь. - Напишите свой собственный
Panel
.