[英]ColorFul Text For Logging In Wpf C#
我有一個 wpf 應用程序,用於記錄錯誤、一般信息和警告。 這些信息也會在應用程序的文本塊中顯示給用戶,因此用戶還可以查看錯誤和其他信息。
但是現在錯誤警告和成功的文本顏色被硬編碼為深灰色。
我要做的工作是讓它以不同的顏色顯示 示例(成功應以綠色顯示,錯誤應以紅色顯示,一般信息以深灰色顯示)。 我嘗試過數據綁定,但無法實現。 我需要一些幫助。 下面我分享所需的相關代碼。
MainWindow.Xaml 代碼
ListView Height="230"
ItemsSource="{Binding EventLogList}">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel Width="560">
<TextBlock Foreground="DarkGray"
Text="{Binding}"
TextWrapping="Wrap"/>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
主窗口視圖模型.cs
public ObservableCollection<string> EventLogList
{
get => _eventLogList;
set => Set(ref _eventLogList, value);
}
protected sealed override void LogInfoEvent(string msg)
{
EventLogList.Insert(0, $"{_logDate} [Info]: {msg}");
base.LogInfoEvent(msg);
}
protected sealed override void LogErrorEvent(string msg, Exception exception = null)
{
if (IsScanningMode)
StopScanningExecuteAsync();
EventLogList.Insert(0, $"{_logDate} [Error]: {msg}");
base.LogErrorEvent(msg, exception);
}
首先,更改日志條目類型。 我定義了一個新對象。 ValueTuple
不起作用,因為它的成員不是屬性。
public class LogEntry
{
public string Log { get; private set; }
public string Level { get; private set; }
public LogEntry(string log, string level)
{
Log = log;
Level = level
}
}
public ObservableCollection<LogEntry> EventLogList
{
get => _eventLogList;
set => Set(ref _eventLogList, value);
}
protected sealed override void LogInfoEvent(string msg)
{
EventLogList.Insert(0, new LogEntry($"{_logDate} [Info]: {msg}", "Info"));
base.LogInfoEvent(msg);
}
protected sealed override void LogErrorEvent(string msg, Exception exception = null)
{
if (IsScanningMode)
StopScanningExecuteAsync();
EventLogList.Insert(0, new LogEntry($"{_logDate} [Error]: {msg}", "Error"));
base.LogErrorEvent(msg, exception);
}
<ListView Height="230"
ItemsSource="{Binding EventLogList}">
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel Width="560">
<TextBlock Text="{Binding Log}"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Level}" Value="Error">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Level}" Value="Info">
<Setter Property="Foreground" Value="DarkGray" />
</DataTrigger>
<DataTrigger Binding="{Binding Level}" Value="Ok">
<Setter Property="Foreground" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.