Wie zu emulieren eine Konsole in WPF?
Ich würde gerne einige Tipps-in-die-richtige-Richtung oder sogar Lösungen zu diesem problem und ich bin ziemlich fest (ich bin nur Anfänger/fortgeschrittene):
Ich versuche, die Implementierung eines SSH in meiner Anwendung. Das SSH-backend funktioniert einwandfrei und so, aber ich bin stecken geblieben auf dem frontend. Was WPF-Kombination zu präsentieren, würde mir eine adäquate Lösung zu emulieren eine Konsole? Beiseite eine vollständige terminal-emulation, würde ich gerne einfach readline/writeline-in etwas, das aussieht wie eine Konsole 🙂
Mein bester Ansatz war noch ein 80x50 Raster von einzelnen Zeichen, was in 4000 einzelnen Zellen und das fühlt sich wie ein totaler overkill.
Andere Idee war es, eine Konsole-Appl. gebunden an ein wpf-Fenster in einem anderen Projekt. Aber...ist das überhaupt möglich und wie?
- Nichts sieht mehr aus wie ein Konsolen-Fenster als... ein Konsolen-Fenster.
- Dies könnte hilfreich gewesen, wenn es hilfreich gewesen wäre. Bitte, so freundlich sein, zu erarbeiten.
- Sie könnten Stil einer ListBox und verwenden Textfelder, wie die Elemente und tha Letzte Textfeld bearbeitbar geben Sie einen Befehl eingeben, behandeln Sie den text eingegeben, stellen Sie die TextBox nur Lesen, und fügen Sie ein neues Textfeld auf der Unterseite
- Mein Punkt war.. wenn Sie möchten, eine Konsole.. warum nicht einfach schreiben Sie eine console-Anwendung?
- Allerdings wäre das der naheliegendste Weg, es ist nicht das, was ich wollte, otherway ich wäre einfach mal für eine Konsole 🙂 Vielleicht wusste ich einfach nicht, machen mir sehr klar. Mein schlechtes.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, dass Sie möchten, um emulieren eine Konsole, würde ich es so machen. Beachten Sie, dass Sie würde haben, um die Befehle und Ausgabe der Ergebnisse selbst.
Seite.xaml
Seite.xaml.cs
Wussten Sie, dass Sie eine Konsole-Fenster von Ihrer Anwendung AllocConsole?
Oder Sie können verwenden Sie diese:
Für besser aussieht, ersetzen Sie den TextBlock mit einer ListBox und Stil der ItemTemplate entsprechend.
Ich habe nicht es selbst getan, aber er ist einer von meinen "ich werde es tun wenn ich Zeit habe"-Projekte.
Also ich bin noch auf der Suche für eine vorhandene Implementierung 😛
Sowieso einige Gedanken:
Den applroach zu verwenden Visuals (D. H. Ellipsen, Textblöcke) ist wahrscheinlich nicht eine gute Idee.
Denken Sie nur, was zu geschehen hat, wenn Sie so wollen 200x100 Zeichen. Vielleicht sogar einen backbuffer. Halten Sie alle im Speicher + zeichnen....es wird unglaublich langsam.
Daher die bessere (oder auch rechten) Ansatz zum "selber ziehen". Da WPF ist backbuffered und die Sie nicht anzeigen möchten, die einer beliebigen bitmap die meisten Hilfspersonal Ansatz wäre es, erstellen Sie ein neues Benutzersteuerelement-und überschreiben Sie die Paint-Methode.
Sie ma lieber von Control abgeleitet, aber UserControl können Inhalte enthalten, so können Sie zeigen so etwas wie eine Verbindung-Symbol im inneren.
Architektur-Weise, würde ich vorschlagen, erstellen Sie eine dependecy Eigenschaft Puffer (
ConsoleBuffer
), das hält die Konsole Puffer-Modell. Ein anderes DP würde halten Sie die Obere linke Position Lage (long
). Es bestimmt, wo um die Anzeige zu starten (während Sie einen Blick hinter). Die Konsole Modell würde ich eine Klasse, die enthält einechar[]
und einColor[]
(ein-dimensional). Verwenden Sie Zeilenumbrüche und\n
Zeichen zu machen-Linien (denn dies ist der Charakter einer Konsole). Dann, wenn Sie die Größe des Steuerelements wird es re-flow ohne die Puffer müssen neu zugewiesen werden.Arbeiten Sie mit **ConsoleBuffer**s in verschiedenen Größen (für verschiedene Anzahl von Blick hinter Zeichen).
ConsoleBuffer.Write(string s)
ist Ihre Methode, um Dinge zu tun.Vielleicht ist es ratsam, halten Sie arrays von arrays
char[][]
zum darstellen von Linien.... aber das ist bis zu finden, während der Programmierung.