【发布时间】:2016-08-26 13:16:55
【问题描述】:
我有一个ListView,我使用TextWriter 的实现将输出重定向到如下:
ScriptEngine pyEngine;
pyEngine.Runtime.IO.RedirectToConsole();
Console.SetOut(TextWriter.Synchronized(new ListViewWriter(lbIpyOutput, Dispatcher)));
我想根据 Enum 值实现ListView item 的彩色背景。
在 SO 上的大多数示例中,DataBinding 用于作为类的属性。对我来说,颜色不依赖于任何属性,而是Enum。 Atm 我使用一种方法来格式化输出。
public static void WriteToConsole(string _stringToWrite)
{
string output = String.Format("PY | {0} | {1} | {2}", tagCount, DateTime.Now, _stringToWrite);
Console.WriteLine(output);
tagCount++;
}
ListViewWriter 是TextWriter 的实现
class ListViewWriter : TextWriter
{
private ListView listView;
public ListViewWriter(ListView _listBox, Dispatcher _dispatcher)
{
listView = _listBox;
}
public override void WriteLine(string value)
{
base.WriteLine(value);
listView.Items.Add(value.ToString());
}
}
由于DataBinding 似乎不是我想要覆盖Console.WriteLine(String _stringToWrite, MyEnum enum) 的选项,但这显然不起作用,因为TextWriter 发现“没有合适的方法来覆盖”。
我也创建了一个转换器类,但不知道如何充分利用(不确定是否真的可以使用十六进制值作为字符串):
class OutputBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Severity severity = (Severity)value;
string bgColor = "Gray";
switch (severity)
{
case Severity.CRITIC:
bgColor = "27ae60"; //carrot orange
break;
case Severity.DEBUG:
bgColor = "3498db"; //peter river blue
break;
case Severity.ERROR:
bgColor = "e74c3c"; //alizarin red
break;
case Severity.MESSAGE:
bgColor = "95a5a6"; //concrete grey
break;
case Severity.WARNING:
bgColor = "9b59b6"; //amethyst purple
break;
}
return bgColor;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
如果有人可以在这里帮助我,那就太好了。我真的不知道如何解决这个问题,而且我对 WPF 还很陌生。
网络版本:4.5.1
编辑1 枚举仅用于内部日志记录,如下所示:
enum Severity{CRITIC, WARNING, DEBUG, MESSAGE, ERROR};
【问题讨论】:
-
你从哪里得到严重性?这将帮助我回答这个问题。例如,如果您有一个函数 WriteLine(string str, Severity sev),则必须传入 Severity,但该 Severity 是从哪里来的?你能用那个代码更新你的问题吗?
-
抱歉回复晚了。请参阅枚举的编辑。