Hmmm pamiętam jak przerabiałem aplikacje z WinForma na WPF ^^ mój poprzednik coś podobnego jak ty wymyślił. W sensie dodawanie kontrolek przycisków do panelu. Dodatkowo zrobił obok 15 list przechowujących parametry przycisku. Przerobiłem to w ten sposób
Więc stworzyłem sobie model przycisku przechowujących najważniejsze parametry
class ButtonCategory : Button
{
public int idCategory; // Id kategori która reperezentujemy
public string categoryName; // Nazwa kategori reprezentowanej
public int countCustomer; // Ilosc klientów w danej kategori przy odpowiednich parametrach kategori perezentowanej
public int parametrKomornik; // Parametr komornik prezentowanej kategori (parametr otrzymywany z API, nie jest on wykorzystywany nigdzie w aplikacji lecz stanowczo kazali nic nie ruszać oraz iż ma być on przechowywany)
/// <summary>
/// Tworzenie przycisku oraz przypisanie jej niezbędnych parametrów
/// </summary>
/// <param name="_categoryName">Nazwa</param>
/// <param name="_countKlientow">Ilosc klientow</param>
/// <param name="_idKategory">Id kategori</param>
/// <param name="_parametrKomornik">parametr komornik</param>
public ButtonCategory(string _categoryName, int _countKlientow, int _idKategory, int _parametrKomornik)
{
this.countCustomer = _countKlientow; // przypisanie
this.categoryName = _categoryName; // przypisanie
this.idCategory = _idKategory; // przypisanie
this.parametrKomornik = _parametrKomornik; // przypisanie
ConfigButton(); // Ustawienie profilu przycisku
}
/// <summary>
/// Funkcja zarządzająca wizualizacją przycisku
/// </summary>
private void ConfigButton()
{
Content = new TextBlock() // Ustawienie textu na TextBlock dzieki czemu można mieć wiele linijek text w przycisku
{
FontSize = 11, // Ustawienie czcionki
Text = categoryName + " ( " + countCustomer + " ) ", // Ustawienie textu na nazwę prezentowanej kategori + "(ilość klientów)"
TextAlignment = TextAlignment.Center, // Ustawienie wysrodkowania
TextWrapping = TextWrapping.Wrap // Ustawienie wapingu
};
Width = 100; // Ustawienie szerokości przycisku
Height = 50; // Ustawienie wysokości przycisku
Margin = new Thickness(5, 5, 5, 5); // Ustawienie marginesu, żeby przyciski do siebie nie przylegały
}
}
ConfigButton() - ustawia konfiguracje wyglądu przycisku.
Dodanie Przycisku do WrapPanel name="Wp_Button"
ButtonCategory CategoryButton = new ButtonCategory("wkładamy dane jakie mamy wrzucić"); // Stworzenie obiektu oraz jego konfiguracja
WP_Button.Children.Add(CategoryButton); // Dodanie obiketu to WarpPanelu
amountCategory_dynamic = amountCategory_dynamic + 1; // A to mam do zliczania ilości przycisków przez co klasa zarządzająca wielkością okna oraz położeniem wie jak ma powiększyć okno
CategoryButton.Click += Click_StandardCategory; // Dołożenie akcji przycisku
Fragment odwołania się do obiektu i rozpoznanie co to za obiekt z jakimi parametrami
private void Click_StandardCategory(object sender, EventArgs e)
{
ButtonCategory ChooseButton = (ButtonCategory)sender; // Da sprawdzenia jaka została wybrana kategoria, i teraz z obiektu ChooseButton jesteś wstanie wyciagnac informacje takie jak ustawiłeś w modelu
}
Nie pamiętam czy w WinFormie jest WarpPanel ale jak tak to polecam. Bo on sam ustawia rozmieszczenie przycisków. Dzięki czemu jak rozciągasz okno to masz więcej przycisków w jednym rzędzie albo jak zwęzisz to masz więcej kolumn. Do tego możesz dodać suwaka i nawet przyjemnie to wygląda.