簡體   English   中英

用於登錄 Wpf C# 的彩色文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM