我有一個 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);
}
uj5u.com熱心網友回復:
首先,更改日志條目型別。我定義了一個新物件。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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342844.html
上一篇:如何在老虎機C#中隨機化影像
