Прежде всего, у меня есть ItemsControl
, целью которого является отображение нескольких групп содержимого; внутри каждой группы есть еще один ItemsControl
, который предназначен для отображения серверного Button
внутри.C#/WPF - равномерно растягивать кнопки в вложенных элементах ItemsControl для заполнения всего пространства
Мой .xaml:
<Window x:Class="CX11TestSolution.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="768"
Width="1024">
<ItemsControl ItemsSource="{Binding HahaList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Label Content="{Binding Name}" />
<ItemsControl Grid.Row="1"
ItemsSource="{Binding ItemList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Мои .xaml.cs:
public partial class MainWindow : Window
{
public IEnumerable<SomeClass> HahaList { get; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
HahaList = new List<SomeClass>()
{
new SomeClass("Group 1", new List<SomeClass>() {
new SomeClass("11"),
new SomeClass("12"),
new SomeClass("13"),
new SomeClass("14"),
new SomeClass("15"),
new SomeClass("16"),
}),
new SomeClass("Group 2", new List<SomeClass>() {
new SomeClass("21"),
new SomeClass("22"),
new SomeClass("23"),
new SomeClass("24"),
}),
new SomeClass("Group 3", new List<SomeClass>() {
new SomeClass("31"),
new SomeClass("32"),
new SomeClass("33"),
}),
new SomeClass("Group 4", new List<SomeClass>() {
new SomeClass("41"),
new SomeClass("42"),
}),
new SomeClass("Group 5", new List<SomeClass>() {
new SomeClass("52"),
}),
};
}
}
public class SomeClass
{
public string Name { get; }
public IEnumerable<SomeClass> ItemList { get; }
public SomeClass(string name, IEnumerable<SomeClass> list)
{
Name = name;
ItemList = list;
}
public SomeClass(string name)
{
Name = name;
}
}
Так что мой вопрос заключается в том, что как я в равной степени растяните высоту кнопок так, чтобы они заполнят всю площадь?
Я фактически попытался установить ItemsPanel
родителя ItemsControl
к UniformGrid
который имеет Columns
1, и это делает работу, когда количество кнопок в каждой группе не больше, чем 5. Когда оно превышает 5, шестую кнопку переместится в следующую строку, тем самым сокращая первую строку, чтобы каждая группа имела равную высоту. Благодарим вас заранее.
Спасибо Марку. Я попытаюсь реализовать эту логику в кодировке и дам вам знать, если я это выясню. –
@ Juniver Ханойский ответ обновлен. –
Привет, Марк, я пробовал ваше решение с GridHelpers, и он работает хорошо. Я узнал об использовании GridHelpers и вашего Tuple. Большое спасибо. –