non l'ho fatto io, ma è uno dei miei "Lo farò se ho tempo "-Progetti. Così Sto ancora cercando di un'implementazione esistente :-P
In ogni modo alcune riflessioni:
L'applroach utilizzare Visuals (vale a dire Ellissi, TextBlocks) non è probabilmente una buona idea. Pensa a cosa deve succedere se vuoi 200x100 caratteri. Forse anche un backbuffer. Tenendolo tutto in memoria + disegnandolo .... sarà incredibilmente lento.
Quindi l'approccio migliore (o addirittura giusto) è "disegnare te stesso". Poiché WPF è backbuffato e non si desidera visualizzare una bitmap arbitraria, l'approccio più probabile sarebbe quello di creare un nuovo UserControl e sovrascrivere il suo Paint-Method. Si preferisce derivare da Control, ma UserControl può avere contenuto, quindi è possibile mostrare qualcosa come l'icona di un indicatore di connessione all'interno.
Per quanto riguarda l'architettura, suggerirei di creare una proprietà di dipendenza Buffer (ConsoleBuffer
) che contiene il modello di buffer della console. Un altro DP terrebbe la posizione in alto a sinistra Posizione (long
).Determina dove avviare il display (mentre si guarda indietro). Il modello di console vorrei creare una classe che contenga un char[]
e un Color[]
(unidimensionale). Utilizzare la suddivisione in linea e i caratteri \n
per creare linee (perché questo è il carattere di una console). Quindi, se ridimensionate il controllo, il flusso riprenderà senza che il buffer debba essere riassegnato. Puoi lavorare con ** ConsoleBuffer ** di dimensioni diverse (per un diverso numero di look dietro i caratteri).
ConsoleBuffer.Write(string s)
è il tuo metodo per fare cose.
Forse è consigliabile tenere array di array char[][]
per rappresentare le linee .... ma questo è fino a scoprirlo durante la programmazione.
Niente assomiglia più a una finestra della console di ... una finestra di console. –
Questo potrebbe essere stato utile se sarebbe stato utile. Per favore, sii così gentile da elaborare. – FrankyTheDumb
Puoi modellare un ListBox e utilizzare i TextBox come elementi e avere l'ultimo TextBox modificabile per digitare un comando, in entrata gestire il testo inserito rendere il TextBox di sola lettura e aggiungere un nuovo Textbox in fondo –