private void Println(string text, SolidColorBrush brush) => Dispatcher.Invoke(() =>
{
RichTextBoxLogger.Document.Blocks.Add(new Paragraph(new Run(text) { Foreground = brush }));
});
private void Println(string text)
{
Println(text, Brushes.LawnGreen);
}
private void PrintMsg(string message)
{
Println($"[ ] {message}", Brushes.Yellow);
}
private void PrintErr(Exception e)
{
Println($"[-] {e}", Brushes.Red);
}
使用它
private void Fsw_Deleted(object sender, FileSystemEventArgs e)
{
string time = DateTime.Now.ToString("h:mm:ss tt");
string output = $"[*] {e.Name}: \"Deleted At : {time}\"";
Println(output);
}
結果是:

我想添加這些行,它們之間沒有空行。
uj5u.com熱心網友回復:
為了防止兩個連續段落之間發生中斷,您必須將Paragraph.KeepWithNext屬性設定為true:
var paragraphWithoutBreak = new Paragraph { KeepWithNext = true };
我不建議RichTextBox為您的任務使用重型。當產量增長時,它會變慢。而是使用燈ListBox。ListBox具有 UI 虛擬化功能,將顯著提高性能。當您設定ListBoxItem.IsHitTestVisible為 時false,該檔案的ListBox外觀和感覺就像一個只讀檔案。為每種訊息型別定義一個 DataTemplate 以控制輸出的外觀:
ILogMessage.cs
interface ILogMessage
{
string Message { get; }
}
ErrorMessage.cs
一條紅色訊息。
class ErrorMessage : ILogMessage
{
// TODO::Implement interface and add a constructor that accepts a message.
}
WarningMessage.cs
一條黃色訊息。
class WarningMessage : ILogMessage
{
// TODO::Implement interface and add a constructor that accepts a message.
}
InfoMessage.cs
一條綠色訊息。
class InfoMessage : ILogMessage
{
// TODO::Implement interface and add a constructor that accepts a message.
}
主視窗.xaml.cs
partial class MainWindow : Window
{
public ObservableCollection<ILogMessage> Messages { get; }
public MainWindow()
{
InitializeConmponent();
this.Messages = new ObservableCollection<ILogMessage>();
}
private void WriteInfoLine(string message)
=> this.Messages.Add(new InfoMessage(message));
private void WriteWarningLine(string message)
=> this.Messages.Add(new WarningMessage(message));
private void WriteErrorLine(string message)
=> this.Messages.Add(new ErrorMessage(message));
}
主視窗.xaml
<Window>
<Window.Resources>
<DataTemplate DataType="{x:Type local:InfoMessage}">
<TextBlock Text="{Binding Message, Mode=OneTime}"
Foreground="LawnGreen" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:WarningMessage}">
<TextBlock Text="{Binding Message, Mode=OneTime}"
Foreground="Yellow" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ErrorMessage}">
<TextBlock Text="{Binding Message, Mode=OneTime}"
Foreground="Red" />
</DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Messages}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsHitTestVisible"
Value="False" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Window>
請參閱此示例以了解如何在添加新專案時將訊息視圖滾動到底部。您可以使用示例的LogMessageBox控制元件 (a UserControl) 并替換上面的ListBox.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471391.html
