Я пытаюсь написать простой проект обучения WPF, который создает набор кнопок внутри главного окна с изменяемым размером. Для каждой записи в коллекции должна быть одна Button
, и содержимое этой коллекции может меняться во время выполнения. Я хочу, чтобы кнопки заполняли все окно (например, 1 кнопка @100% ширина, 2 кнопки с шириной 50%, 3 кнопки шириной 33% и т.д. Все на высоте 100%). Упрощенная версия того, что я написал до сих пор:
<ItemsControl x:Name="itemscontrolButtons" ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Tag="{Binding}">
<TextBlock Text="{Binding}" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
...
List<string> listButtonTexts = new List<string>() { "Button1", "Button2" };
...
itemscontrolButtons.DataContext = listButtonTexts;
В результате получается следующее:
Мне не удалось заставить кнопки растягиваться в соответствии с шириной, и мои попытки использовать Grid
вместо StackPanel
оказались бесплодными.
Затем, в качестве дополнительного улучшения, я был бы признателен за советы по его настройке таким образом, чтобы, если есть так много кнопок, что они не могут правильно поместиться на линии или уже имеют пороговое значение, она будет перенесена на новую строку ( тем самым уменьшая половину высоты кнопок при переходе от 1 до 2 строк).
Я хотел бы подчеркнуть, что я хотел бы знать, как это сделать WPF. Я понимаю, что могу использовать сообщения об изменении размера окна и явно изменять размеры элементов управления, а также то, как я сделал это с помощью MFC или WinForms, но из того, что я прочитал, не так, как это должно быть сделано с WPF.