Ich versuche, ein einfaches WPF-Lernprojekt zu schreiben, das eine Reihe von Schaltflächen in einem veränderbaren Hauptfenster erstellt. Pro Eintrag in einer Auflistung muss ein Button
vorhanden sein, und der Inhalt dieser Auflistung kann während der Laufzeit variieren. Ich möchte, dass die Tasten das gesamte Fenster ausfüllen (z. B. 1 Taste @ 100% Breite, 2 Tasten @ 50% Breite, 3 Tasten @ 33% Breite usw. alle auf 100% Höhe). Eine vereinfachte Version von dem, was ich bisher geschrieben habe, ist:Stretching-Steuerelemente zum Füllen von 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;
Dies ergibt:
ich nicht in der Lage gewesen, die Tasten zu machen strecken die Breite und meine Versuche passen einen Grid
statt StackPanel
zu verwenden waren fruchtlos. Als eine optionale Verbesserung würde ich mich über Vorschläge freuen, wie man es so einstellen kann, dass es, wenn es so viele Knöpfe gibt, dass sie nicht richtig in eine Linie passen oder schmaler als ein Schwellenwert sind, in eine neue Linie eingewickelt wird (wodurch die Knopfhöhen halbiert werden, wenn von 1 bis 2 Reihen gegangen wird).
Ich möchte betonen, dass ich würde gerne wissen, wie dies das WPF Weg zu tun. Mir ist klar, dass ich Fenstergrößenänderungsanforderungen und Größenänderungen der Steuerelemente explizit ausführen kann, und das hätte ich mit MFC oder WinForms gemacht, aber aus dem, was ich gelesen habe, ist nicht, wie solche Dinge mit WPF getan werden sollten.
Das war genau das, was ich für mein primäres Ziel brauchte, danke. – Gregyski
Dank Nirs Antwort konnte ich das optionale Kriterium erfüllen. Details sind in der Antwort, die ich auf diese Frage gepostet habe. Es wurde auf Meta empfohlen, dass ich diese Situation auf diese Weise behandle. http://meta.stackexchange.com/questions/14306/my-improved-answer-based-on-anothers-accepted-answer-for-my-own-question – Gregyski
Vielen Dank! Dies ist genau das, was mir fehlte, wenn ich Elemente und ihr Panel gleichmäßig in einer Listbox platzierte. –