Hallo Forumgemeinde,
ich habe eine Frage wie ich etwas einfacher implementieren kann.
Ich habe eine Oberfläche mit WPF/MVVM erstellt. Ich nutze eine serielle Schnittstelle, um Teile eines Microcontroller zu bedienen. Meine Oberfläche hat unter anderem 8 Bereiche, die optisch komplett gleich aussehen. Ich habe alle diese Bereiche aufwendig und separat erstellt. Wenn mir ein Fehler in einem Bereich aufgefallen ist, musste ich das Ganze natürlich in allen anderen Bereichen nach-korrigieren.
Ich würde jetzt gerne eine Art Vorlage erstellen, und diese dann in meinem Hauptfenster instanziieren. Ich weiß jetzt aber nicht, wie ich das am besten machen kann.
Ich habe im Internet schon über „user-controls“ gelesen, aber das sieht für mich immer danach aus, als sind das eher popups die mal für eine Eingabe genutzt werden können. Aber ich möchte die Vorlage permanent sehen.
Ich habe mal in Excel zwei Ansichten erstellt, um exemplarisch darzustellen, was ich meine. Das Bild zeigt oben links, wie ein Bereich generell aussehen soll. Es sollte ein Textfeld haben, um dem Bereich einen Namen zu geben. Es soll einen Slider habe, um Werte einzustellen und ein Feld um den eingestellten Wert als Status darzustellen. Zwei Buttons um Ein- und Aus- zu schalten. Und zwei Checkboxen.
Die andere Ansicht auf dem Bild zeigt dann, wie das Hauptfenster aussehen soll. Auf der Mainview soll die Vorlage dann mehrfach instanziiert werden. Wenn ich dann einen Fehler in der instanziierten Ansicht finde, muss ich das nur in der Vorlage anpassen, und nicht in allen Ansichten einzeln.
Ich weiß nicht, wie man so etwas realisiert. Geht das überhaupt?
Kann mir jemand hier einen Hinweis geben in welche Richtung ich suchen soll?
Habt ihr so etwas schonmal gemacht?
Viele Dank schonmal für eure Hilfe und viele Grüße
"Geht sowas" kann man immer mit Ja beantworten - alles immer nur Frage des Aufwands.
Ich habe im Internet schon über „user-controls“ gelesen, aber das sieht für mich immer danach aus, als sind das eher popups die mal für eine Eingabe genutzt werden können. Aber ich möchte die Vorlage permanent sehen.
Ist am Ende nur Umsetzung.
Wenn Du das dynamisch in Deiner Anwendung templatieren willst, dann würde würde man sowas vermutlich aber nicht technologie-nativ mit WinForms oder WPF umsetzen, sondern mit 2D-Rendering.
Im Endeffekt willst nichts anderes bauen als einen Designer, und dessen Inhalte rendern eigentlich alle solcher Anbieter selbst mit 2D (ob das nun am Ende sowas gerendert wird wie Du hast, oder nen PDF Template, ist ja egal).
Willst Du WPF direkt nutzen, dann kannst Dir zur Entwicklungszeit eben User Controls / XAML Templates bauen; willst Du es zur Laufzeit, dann brauchst eine Art Designer, bei der die Du Inhalte eines Windows zusammen bauen kannst (im Endeffekt das nachbauen, was Visual Studio da grob hat - ob grafisch oder nicht ist dann Deine Sache) und blendest Dann nur noch das Window ein
Window window = new Window
{
Title = title,
Width = 400,
Height = 200,
Background = Brushes.White
};
// dann hier Controls zusammen bauen
StackPanel panel = new StackPanel
{
Margin = new Thickness(20)
};
TextBlock text = new TextBlock
{
Text = message,
FontSize = 16,
Margin = new Thickness(0, 0, 0, 10)
};
panel.Children.Add(text);
window.Content = panel;
// am Ende anzeigen
window.Show();
Hallo StayCalm,
schau dir einfach mal dieses Beispiel an: Erzeugen und Verwendung eines UserControls
Anstatt mehrere dieser UserControls einzeln zu instanziieren, kannst du diese natürlich auch in einem Container (z.B. ItemsControl) darstellen, damit du vom MVVM-Code her einfacher auf diese zugreifen kannst (mittels Index anstatt individuell).