Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 9 von 9
  1. #1
    Neuer Benutzer
    Registriert seit
    27.04.2015
    Beiträge
    5

    Standard wpf xaml - GUI zur Laufzeit anpassen

    Hallo,

    ich suche einen Ansatz, wie man zur Laufzeit fertige xaml Masken anpassen kann. Genauer gesagt, würde
    ich das gern mit Hilfe einer eigenen GUI machen. Es muss dabei sichergestellt sein, dass nur Felder bearbeitetet
    werden können (hinzufügen, löschen, verschieben, Grafik einfügen, usw.). An der Funktion selbst darf nichts
    geändert werden.

    Bin für jeden Hinweis dankbar! Wie sollte man da am besten vorgehen?

    Vielen Dank
    lg
    R

  2. #2
    Stammgast
    Registriert seit
    11.12.2007
    Ort
    Waidring / Tirol
    Beiträge
    3.836

    Standard

    Hallo,

    zur Laufzeit kann mit dem XamlReader das "Markup" nachgeladen werden -> Dynamically Loading XAML.
    Jetzt brauchst du noch einen Weg das XAML zu generieren und fertig.

    Da XAML eigentlich nur XML ist, so sollte die Anpassung schon möglich sein. Vllt. gibt es auch fertige Designer die dafür verwendet werden können, aber bekannt ist mir keiner und gesucht hab ich auch nicht danach.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

  3. #3
    Neuer Benutzer
    Registriert seit
    27.04.2015
    Beiträge
    5

    Standard

    Hallo Gü,

    vielen Dank, der Ansatz gefällt mir schon sehr gut!
    Bin aber weiterhin für Idee, Ratschläge, usw. offen!

    Vielen Dank
    R

  4. #4
    Zaungast
    Registriert seit
    03.06.2016
    Beiträge
    35

    Standard

    Ich gehe den "klassischen" Weg (und falle ganz schön oft auf die Schnautze):

    • Im WPF muss das Root Element (oder das Element, mit dem man arbeiten will) benannt werden: Name="XYZ";
    • Im Code dann:
      • ein Objekt mit "new" anlegen
      • mit XYZ.Children.Add(obj); an die Oberfläche packen
      • mit obj.Width = x / obj.Height = x; skalieren
      • mit Canvas.SetLeft(obj, wo) / Canvas.SetTop(obj, wo) positionieren

    etc.

    Ich bin sicher, dass ist nicht der Königsweg, aber was besseres habe ich nicht gefunden.

  5. #5
    Neuer Benutzer
    Registriert seit
    27.04.2015
    Beiträge
    5

    Standard

    Hallo Ralph,

    danke das nutzt mir nicht viel. Anfoderung ist die. Ich habe ein fertiges Programm, installiert und beim Kunden im Einsatz. Nun
    möchte ich dem Kunden die Möglichkeit geben, seine Masken selbst zu erweitern, sprich neues DAtenbankfeld anlegen, Masken anpassen.
    Das gnaze soll natürlich über eine Art Maskeneditor gehen, wo der User die Felder verschieben kann, usw. Dazu kommt, dass an der Funktionalität
    der Maske nichts geändert werden darf.
    Evtl. soll der User auch eigene Events an Felder anhängen können, dies wäre aber der übernächste Schritt erst.

    lg
    R

  6. #6
    Zaungast
    Registriert seit
    03.06.2016
    Beiträge
    35

    Standard

    Bei so einer Aufgabe ist Weg von gfoidl natürlich einfacher, nichts desto weniger trotz ist mein Weg auch eine gangbare Lösung - die mir sympatischer ist: (Rant:) Bei XAML wird zur Laufzeit analysiert und dann Fehler geschmissen. Man kann sich a) nie sicher sein, ob MS doch irgendwo die API breaking ändert und b) pb man nicht selbst einen Klopper gerissen hat. Daher ist mir meine Lösung sympatischer: Alles wird zur Compile Zeit validiert und ist dann gültig und lauffähig und funktioniert (IMHO hat XAML die gleichen Fehler wie SQL: Fehler nicht zur Compile-Zeit feststellbar).

  7. #7
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.260

    Standard

    nichts desto weniger trotz ist mein Weg auch eine gangbare Lösung
    Musst jetzt nur noch erklären, wie man zur Laufzeit deinen Code ins Programm bekommt

    Fehler wie SQL: Fehler nicht zur Compile-Zeit feststellbar


    Das sollte wie genau passieren?
    Das ist ein "Fehler"?

    Wenn ich also ein Steuerungsprogramm für einen Industrieroboter an diesen sende, und das läuft schief, ist es ein Fehler, dass die Fehler nciht beim compilieren entdeckt wurden?
    Geändert von Christian Marquardt (21.11.2017 um 08:42 Uhr)
    Christian

  8. #8
    Zaungast
    Registriert seit
    03.06.2016
    Beiträge
    35

    Standard

    Zitat Zitat von Christian Marquardt Beitrag anzeigen
    Musst jetzt nur noch erklären, wie man zur Laufzeit deinen Code ins Programm bekommt
    Code bekommt man nicht zur Laufzeit rein (Wir reden mal nicht von nachladen von DLLs, oder eine eigene Scriptingsprache). Klar. Aber man kann zur Laufzeit GUI-Objekte erstellen, positionieren, dimensionieren, einstellen, Ereignisse anhängen, und eben alles machen, was man machen muss/will (man muss manchmal nur etwas suchen wie es geht )

    Mein Ansatz wäre: Speichern was "was und wo und wie". Also: Textfeld auf A6 (Sorry), und dann das Datenbing XYZ ran, bzw. auf ein Event verweisen, bei dem als erstes der Sender analysiert wird (forech (UserControl customcontrol in Customcontrols) if (sender == customcontrol ) ...) Alles am Anfang etwas knobeln, danach eine Fingerübung.

    Zitat Zitat von Christian Marquardt Beitrag anzeigen
    Das sollte wie genau passieren?
    Das ist eine "Fehler"?
    (Zusammenhang: "Fehler wie SQL: Fehler nicht zur Compile-Zeit feststellbar")

    Hast Du es noch nie gehabt, dass ein WPF nicht so richtig funktionierte und du dann in den Debug-Ausgaben (Visual Studio Fenster "Output") Fehlermeldungen gesehen hast? Ich sehr oft. z.B. so etwas wie "Property XYZ auf ABC, Componente bla gibt es nicht." In einer klassischen Windows-Form würde das nicht passieren. (OK, Datenbindings haben auch ein "String" Feld - das ist auch ein Fehlereinfallstor. Aber nicht ganz so groß wie XAML)

    Das es so ist ist kein "klassischer" Fehler; es ist eine meiner Meinung nach eine Design Fehlentscheidung. Ich habe das Gefühl, das gesamte XAML Geraffel ist eine "Me too" Sache von Microsoft, weil die so etwas wie HTML haben wollten... Und jetzt ist das über den Kopf gewachsen.

  9. #9
    Neuer Benutzer
    Registriert seit
    27.04.2015
    Beiträge
    5

    Standard

    Guten Morgen,

    alles sehr interessant, was hier geschrieben wird, vielen Dank dafür. Zum Thema, Code zur Laufzeit hinzufügen. Darüber habe ich noch nicht so recht nachgedacht. Ist auch noch Zukunftsmusik.

    Wichtiger ist dertzeit dem User eine Möglichkeit zu geben, seine Masken ändern zu können. Das muss meiner Meinung nach über einen eigenen Designer gehen, der das Grundlayout läd und die Standardfelder gleich einmal
    sperrt, so dass diese nicht verändert werden können. Dann kann man auch gefahrlos neue Felder hinzufügen und mit einem DB-Feld verknüpfen, ja auch hier braucht es ein kleines Tool für die Erweiterung der DB.

    Grundsätzlich bin ich von XAML schon angetan. Ernsthaft Fehler kann man nicht wirklich einbauen, das fällt ja schon bei der Entwicklung und Testing auf, damit hatte ich eigentlich noch nie wirklich Schwierigkeiten.

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •