2014-03-13 8 views
0

我在WPF應用程序中有一個RichTextBox,用作狀態更新的輸出容器。添加的每行都根據其信息級別進行着色(警告 - 黃色,信息 - 灰色等)。富文本框/流文檔>格式(列表順序,行間距和項目符號點)

Paragraph currentStatus = new Paragraph(new Run("ERROR: Couldn't find stuffs.")); 
currentStatus.Foreground = System.Windows.Media.Brushes.Red; 
List myList = new List(); 
myList.ListItems.Add(new ListItem(currentStatus)); 
rtbStatus.Document.Blocks.Add(myList); // existing rich textbox 

。雖然它是工作,挖我還有幾個格式問題了幾個小時之後我似乎無法過度來或研究出:

  1. 我想要列表是倒置,最近的'後'在頂部。我已經能夠通過幾種不同的方式實現這種效果,但每種方法的代價是將前一種顏色格式設置爲控件的默認前景顏色(當間距非常理想時,應用程序具有大約10行的可視緩衝區保留所應用的顏色)。

  2. 我想行間距是正常的,沒有填充的行之間。當使用列表時,每個'帖子'之間有足夠的空間可以再多出兩行,我正在尋找類似於文本塊的多行間距的內容(請參見下面的屏幕鏈接)。

  3. 我很想擺脫子彈點,如果清單是要走的路。

一對夫婦的注意事項:這一切都必須建立在後端做的,我想看看在平滑的自動滾動動畫作爲未來的功能版本,雖然我還沒有研究它尚未(脫線主題)。

現在,我正在閱讀的所有內容都讓我相信richTextBox> flowDocument> list是我的最佳解決方案,因爲我無法弄清AppendText()方法如何利用換行符(environment.NewLine)工作,但已在兩行之間填充的量更大),但在使用其他控件時也不能解決顏色動態變化問題,但我是C#世界的新手。

請告訴我,如果我這樣做是首先困難的方式。但如果任何人有如何實現上述想法,將不勝感激。上述語法的

圖片:

enter image description here

使用textblock所需間距的結果的圖片:

預先感謝。

+0

爲什麼不切換到'TextBlock'的ListBox呢?甚至是一個'DataGrid',這樣你就可以按日期或嚴重程度或其他方式對事件進行排序? –

回答

0

我發現了一些特性,讓我做到這一點,所以我刪除列表後一些調整想出了下面的:

// Status Update 
     public void UpdateStatus(string eventLevel, string message) 
     { 
      Paragraph currentStatus = new Paragraph(new Run(message)); 
      if (eventLevel == "info") 
       currentStatus.Foreground = System.Windows.Media.Brushes.Gray; 

      if (eventLevel == "warning") 
       currentStatus.Foreground = System.Windows.Media.Brushes.Yellow; 

      if (eventLevel == "error") 
       currentStatus.Foreground = System.Windows.Media.Brushes.Red; 

      if (eventLevel == "highlight") 
       currentStatus.Foreground = System.Windows.Media.Brushes.CornflowerBlue; 

      currentStatus.LineHeight = 1; 
      rtbStatus.Document.Blocks.InsertBefore(rtbStatus.Document.Blocks.FirstBlock, currentStatus); 
     } 

,現在可以彩色線條附加到一個「頂」最小行距:

UpdateStatus("error", "My custom error message");