2015-04-05 54 views
0

我試圖在總行數超過預定數目的條目時刪除段落的第一行。這是一種聊天窗口,我不想一次顯示太多的行。系統地刪除第一行

private Paragraph paragraph = new Paragraph(); 
public void WriteMessage(string output) 
    { 
string outputFormat = string.Format("{0}", output); 
      string[] parts = output.Split(new char[]{':'}, 2); 
      string user = parts[0]; 
      string[] username = parts[0].Split('!'); 
      paragraph.Inlines.Add(new Run(username[0].Trim() + ": "){Foreground = UserColor}); 
      paragraph.Inlines.Add(new Run(parts[1]) { Foreground = MessageColor}); 
      paragraph.Inlines.Add(new LineBreak()); 

if (paragraph.Inlines.Count >= 50) { 
       //??? 
       //The count does not actually count lines the way I would expect. 
      } 
} 

不確定最簡單的方法來做到這一點,迄今爲止我嘗試過的一切都沒有奏效。

+0

你想刪除只是第一行? – 2015-04-05 20:27:34

+0

是的,每次添加新條目(例如)時,都會添加一個新條目(例如),我想刪除最舊的條目,以便顯示最多50行。 – CircuitSix 2015-04-05 20:30:13

+0

你期望它做什麼?什麼是「入口」?它有什麼作用?實際計數是多少? – CodeCaster 2015-04-05 20:30:20

回答

0

通過創建FlowDocument並將該段落添加到塊來解決此問題。然後每個條目都是它自己的塊,並保留原始格式。

private Paragraph paragraph = new Paragraph(); 
_rtbDocument = new FlowDocument(paragraph); 

public void WriteMessage(string output) 
    { 
     string outputFormat = string.Format("{0}", output); 
     string[] parts = output.Split(new char[]{':'}, 2); 
     string user = parts[0]; 
     string[] username = parts[0].Split('!'); 

     Paragraph newline = new Paragraph(); 

     newline.LineHeight = 2; 
     newline.Inlines.Add(new Run(username[0].Trim() + ": ") { Foreground = UserColor }); 
     newline.Inlines.Add(new Run(parts[1]) { Foreground = MessageColor }); 

     _rtbDocument.Blocks.Add(newline); 

     if (_rtbDocument.Blocks.Count > 10) 
      { 
       _rtbDocument.Blocks.Remove(_rtbDocument.Blocks.FirstBlock); 
      } 
} 
0

建議您使用List verus數組。它給你一些你需要的功能。

public List<string> TrimParagraph(List<string> paragraph) 
    { 
     int count = paragraph.Count; 

     if (count > 50) 
      paragraph = paragraph.Skip(count - 50).ToList(); 

     return paragraph; 
    } 

編輯...在構建段落對象時使用類似的東西。