2017-05-22 4 views
3

Ich mag würde wissen, ob es möglich ist, die Zeilennummern zeigen (in einer separaten Spalte) ein RichEditBox in UWPC#, oder wenn es andere Möglichkeiten, um es. Ich suche nach einer Lösung für dieses Problem ... Und es scheint mir seltsam, dass es keine Dokumentation darüber gibt: Ich brauche nur einen einfachen Texteditor. Es gibt viele Anwendungen für Windows 10, die es implementieren, und ich weigere mich zu denken, dass es nicht möglich ist.Zeilennummern anzeigen in RichEditBox UWP

enter image description here

Dies ist nur ein Beispiel von CodeWriter, eine Code-Editor-Anwendung. Irgendeine Idee?

+0

* "Ich suche nach einer Lösung für dieses Problem." - Welche? Sie haben nach zwei verschiedenen Funktionen gefragt: Anzeigen von Zeilennummern und Abrufen von Zeilennummern (vermutlich aus dem Inhalt). – IInspectable

+0

Ich hätte gerne eine Spalte auf der Seite der Richeditbox, die Zeilennummern anzeigt. Die Tatsache, Zeilennummern erhalten zu müssen, kann abhängig von der Implementierung sein oder nicht. Dies sind alte und ineffiziente Lösungen, die ein Stackpanel mit Inhalten verwenden, die während der Textbearbeitung aktualisiert wurden. – GiacomoFrisoni

+0

Kann das nicht ... Ich habe versucht, Lösungen mit einem ListView, aber es scheint so hässlich, dass ich dieses Projekt und Repo gelöscht habe, die ich dafür gemacht habe. Wirklich niemand hat Idee, wie man LINE NUMBERS mit einer RichEditBox (nicht RichTextBox!) Handhabt? – Martinocom

Antwort

0

Ich erreiche ein "Ergebnis" über eine Liste und die RichEditBox nachzudenken. Nun, die Lösung ist nicht gut, nach etwa 50 Zeilen Tippen ist es laggy als Hölle, aber zumindest habe ich versucht, 'cos die Frage ist auch wichtig für mich.

So entwarf ich ein Listview und RichEditBox in einem Raster mit zwei Spalten

<ScrollViewer> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <ListView Grid.Column="0" Name="LineNumbers" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"></ListView> 
     <RichEditBox Grid.Column="1" x:Name="RebText" TextChanged="RebText_TextChanged" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled"></RichEditBox> 
    </Grid> 
</ScrollViewer> 

Am Code hinter ich diese hinzugefügt:

private void RebText_TextChanged(object sender, RoutedEventArgs e) 
{ 
    //Clear line numbers 
    LineNumbers.Items.Clear(); 
    int i = 1; 

    //Get all the thext 
    ITextRange text = RebText.Document.GetRange(0, TextConstants.MaxUnitCount); 
    string s = text.Text; 

    if (s != "\r") 
    { 
     //Replace return char with some char that will be never used (I hope...) 
     string[] tmp = s.Replace("\r", "§").Split('§'); 
     foreach (string st in tmp) 
     { 
      //String, adding new line 
      if (st != "") 
      { 
       LineNumbers.Items.Add(i++); 
      } 
      //No string, empty space 
      else 
      { 
       LineNumbers.Items.Add(""); 
      }      
     } 
    } 
} 

Ich denke, die .clear() -Methode und Alle Zeilen jedes Mal zu lesen ist keine gute Übung. Aber wenn Sie eine schnelle Lösung auf maximal 50 Zeilen benötigen, ist dies vielleicht der Weg.

Verwandte Themen