Hallo liebe Community,
ich habe folgendes Problem:
Ich verwalte in einer Tabelle mein Hauptmenü. Dort hinterlegt sind DisplayCaption und UserControl. (Beides strings)
Jetzt habe ich z.b. ein RechnungsControl welches ich beim klick laden möchte.
Nun stehe ich vor dem Problem dass:
grid.Childen.Add() ein UIElement von mir erwaret, ich aber nur den Namen von diesem habe und jetzt eine Instanz davon erzeugen muss.
Könnt ihr mir weiterhelfen?
Gruss
Hallo cs.,
was willst du machen? Könntest du dich etwas klarer ausdrücken?
Ich hab das so verstanden dass du einem Window eine UIElement übergeben das du nur per sting kennst. Dazu gibt es die Methode FrameworkElement.FindName.
Aber ich denke nicht dass dies ist was du willst
Gruß
Michael
FindName() ist in etwa das wo ich hinmöchte, liefert mir aber leider kein UIElement zurück.
Ich möchte einem Grid ein UIElement (UserControl) als Inhalt zufügen. Kenne aber zum besagten Zeitpunkt nur den Namen (als String).
Jetzt möchte ich Quasi eine Instanz des UserControls über den Namen erstellen.
Quasi:
Activator.CreateInstance("RechnungControl", "UIElement");
Jedoch liefert dieser mir nur einen ObjectHandle zurück, den ich laut MSDN "entwrappen" muss. Damit konnte ich jedoch (bisher) nichts anfangen.
Hallo cs.,
du hast einmal die Möglichkeit - wenn es denn möglich ist - das UIElement nach belieben zu casten. Ansonsten bleibt dir noch die Möglichkeit über den logischen bzw. visuellen Tree durchzulaufen. Aber mal abgesehen davon: Warum gibst du dem Control nicht einfach einen Namen und greifst dann auf das Control zu? So hast du viel mehr Freiheiten. Das ist auch in meinen Augen die einfachste Möglichkeit.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Ich kann gerade nicht ganz folgen, inwiefern ich das umsetzen soll.
Kurze Beschreibung der Sachlage:
Ich verwalte mein Hauptmenü in einer Tabelle mit dem Verweis auf das UserControl. (Das UserControl enthält bei mir quasi die gesamte GUI für den Menüpunkt).
Ergo sieht das ungefähr so aus:
DisplayCaption | UserControl
Rechnung | RechnungControl
Benutzerverwaltung | BenutzerControl
etc.
Nun fülle ich aus der Tabelle mein Menü und möchte das beim KLICK auf das Menü das UserControl "RechnungControl" z.B. ins Grid geladen wird.
Ich hoffe, ihr könnt mir folgen.
Danke für eure Hilfe & Mühe.
zero_x mein mit einem Name geben folgendes
<Button Name="buttonName"/>
wie ich es so heraushöre hast du schon ein RechnungsControl als XAML in WPF definiert.Mit:
RechnungsControl rc = new RechnungsControl();
grid.Children.Add(rc);
kannst du es hinzufügen. Mit:
Grid.SetRow(rc,ROWNUMBER);
Grid.SetColumn(rc,COLUMNNUMBER);
Grid.SetColumnsSpan(rc,COULUMNSPANNO)
Grid.SetRowSpan(rc,ROWSPANNO);
im Grid positionieren.
Gruß
Michael
Sorry, ich scheine mich immernoch unklar auszudrücken. Ich versuchs nochmal.
RechnungsControl rc = new RechnungsControl();
grid.Children.Add(rc);
Das ist der Knackpunkt!
Ich kenne an der Stelle nur den Namen, sprich: "RechnungsControl". Er könnte aber auch "BenutzerControl" oder "InfoControl" sein, ergo möchte ich Ihn nicht fest im Code hinterlegen, sondern mal im PseudeCode gesprochen folgendes machen:
var MeinControl = Erstelle.Instanz(string);
grid.Children.Add(MeinControl)
(String ist in dem Fall z.B: "RechnungControl" oder "BenutzerControl" etc.)
Nochmal Danke für eure Mühe und pardon für meine missverständliche Erklärung.
ICH HABS! 😃
Lösung ist wiefolgt:
ObjectHandle returnValue;
returnValue = Activator.CreateInstance("ASSEMBLY-NAME", "ASSEMBLY-NAME.CONTROL_NAME");
var myControl= (UIElement)returnValue.Unwrap();
grdUserControl.Children.Add(myControl);
Danke für eure Hilfe!