[WPF] Dodawanie komponentu do okna/strony w czasie wykonania kodu.

0

Hej,
Zastanawiam się czy jest jakiś sposób żeby dodawać obiekty do okna w czasie wykonania kodu. Wchodząc bardziej w szczegóły, próbuje zaimplementować możliwość dodawania eventów do strony/okienka po kliknięciu na przycisk (createEvent_Click() > Dane o evencie > dodaj do głównej strony TextBox z podanymi wcześniej danymi)
Poniżej próba implementacji wyżej opisanej myśli (nie udana, ale chyba pomoże w zrozumieniu o co w ogóle mi chodzi przez ten cały czas)

    StringBuilder sb = new StringBuilder();
    sb.Append("<TextBlock Grid.Column = \"4\" Grid.Row = \"3\" Text = \"Hello World\" Grid.ColumnSpan = \"6\"  />");
    TextBlock myTextBlock = (TextBlock)XamlReader.Parse(sb.ToString()); 
    this.AddChild(myTextBlock)
1

Nie wiem co dokładnie chcesz osiągnąć, ale jak chcesz dynamicznie dodawać jakieś rozbudowane elementy interfejsu do okna, to zbuduj je najlepiej w postaci UserControl. Masz wtedy ładny kod XAML dostępny w edytorze, a niezależne instancje swojej klasy UserControl możesz dodawać na dowolnej stronie z poziomu kodu i przypisywać im dowolne dane do wnętrza, a używając MVVM light i trzymając się wzorca w ogóle miałbyś ułatwione życie w tej kwestii.

Jeśli z kolei tworzony element jest maleńki, to wystarczy zbudować go w kodzie C# i dodać do rodzica.

Tu masz przykład, co prawda dla UWP, ale w WPF powinno być podobnie, przykład dodawania kontrolki z poziomu code behind: https://stackoverflow.com/questions/36052046/dynamically-add-grid-uwp

Uważam jednak, że z czegoś takiego robi się spagetti i o ile nie jest to jakieś dynamiczne menu contekstowe, czy cokolwiek co jest sens budować z poziomu code behind, to lepiej zrobić sobie kontrolki i ładować do widoku jej instancje dynamicznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1