Próbuję napisać prosty projekt do nauki WPF, który tworzy zestaw przycisków wewnątrz okna głównego z opcją zmiany rozmiaru. Każdy element kolekcji musi mieć jedną wartość: Button
, a zawartość tej kolekcji może się różnić w czasie wykonywania. Chcę, aby przyciski wypełniały całe okno (np. 1 przycisk @ 100% szerokości, 2 przyciski @ szerokość 50%, 3 przyciski przy 33% szerokości itd. Wszystkie na 100% wysokości). Uproszczona wersja tego, co pisałem do tej pory to:Sterowanie rozciąganiem w celu uzupełnienia ItemsControl
<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;
Wynika to w ten sposób:
nie byłem w stanie zrobić przyciski rozciągnąć, aby dopasować szerokość i moje próby użycie Grid
zamiast StackPanel
było bezowocne.
Następnie, jako opcjonalne ulepszenie, byłbym wdzięczny za sugestie, jak dostosować to tak, że jeśli jest tak wiele przycisków, że nie mogą one pasować poprawnie na linii lub są węższe niż próg, to zawinie się na nową linię (w ten sposób zmniejszając o połowę wysokość przycisku, jeśli przechodzisz z 1 do 2 rzędów).
Chciałbym podkreślić, że chciałbym wiedzieć, jak to zrobić WPF way. Rozumiem, że mogę spożywać komunikaty o zmianie wielkości okna i zmieniać rozmiar kontrolek jawnie, i tak bym to zrobił z MFC lub WinForm, ale z tego, co przeczytałem, nie wynika, jak takie rzeczy powinny być robione z WPF.
To było właśnie to, czego potrzebowałem do mojego głównego celu, dziękuję. – Gregyski
Dzięki odpowiedzi Nira udało mi się spełnić opcjonalne kryterium. Szczegóły znajdują się w odpowiedzi na to pytanie. Na Meta polecono mi, że radzę sobie z tą sytuacją w ten sposób. http://meta.stackexchange.com/questions/14306/my-improved-answer-based-on-anothers-accepted-answer-for-my-own-question – Gregyski
Dzięki! Tego właśnie mi brakowało do równomiernego rozmieszczania elementów i ich panelu w skrzynce listy. –