有没有办法在 WPF 列表框项的 运行 时间更改特定 word/string 的颜色?
Is there a way to change the color of a specific word/string at run time of a WPF ListBox Item?
所以我只想在 row/item 时间将特定单词添加到列表框 运行 中,因为我正在使用计时器在 运行 时间添加项目从我的数据库中,我希望特定的 word/string 具有不同的颜色。
即:添加的所有包含 string/word "Aproved" 的新项目应在 运行 时间将新项目添加到 WPF ListBox 后立即着色为绿色。
private void dispatcherTimerMensagem_Tick(object sender, EventArgs e)
{
if (!(principalDB.testarConexãoDB()))
{
dispatcherTimerVendasFechadas.Stop();
dispatcherTimerMensagem.Stop();
LstMensagem.ItemsSource = null;
LbPbVendasFechadas.ItemsSource = null;
}
else
{
mensagem = principalDB.selectMessagemUsuario(null);
if (mensagem != string.Empty)
{
this.Activate();
LstMensagem.Opacity = 1;
LstMensagem.Items.Add(principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem);
voice.Voice = voice.GetVoices().Item(0);
myWorkerMensagem.WorkerReportsProgress = true;
myWorkerMensagem.WorkerSupportsCancellation = true;
myWorkerMensagem.RunWorkerAsync();
if (VisualTreeHelper.GetChildrenCount(LstMensagem) > 0)
{
Border border = (Border)VisualTreeHelper.GetChild(LstMensagem, 0);
ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
scrollViewer.ScrollToBottom();
}
}
else
{
LstMensagem.Opacity = 0.5;
}
}
}
所以 LstMensagem 将在 运行 时间从声明的变量中接收一个新项目,在这行代码中:
LstMensagem.Items.Add(principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem);
如果出现特定的 word/string,例如 "aproved",我希望该字符串具有不同的文本颜色,例如,刷成绿色。
使用 TextBlock 代替字符串。对于整个项目:
var text = principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem;
var tb = new TextBlock();
tb.Text = text;
if(text.Contains("aproved"))
tb.Foreground = Brushes.Green;
LstMensagem.Items.Add(tb);
仅针对项目的一部分,使用内联 属性 添加不同格式的文本:
var tb = new TextBlock();
tb.Inlines.Add(new Run { Foreground = Brushes.Green, Text =
principalDB.mensagemRemetente});
tb.Inlines.Add(" (" + principalDB.mensagemData + ")" + ": " + mensagem);
LstMensagem.Items.Add(tb);
所以我只想在 row/item 时间将特定单词添加到列表框 运行 中,因为我正在使用计时器在 运行 时间添加项目从我的数据库中,我希望特定的 word/string 具有不同的颜色。
即:添加的所有包含 string/word "Aproved" 的新项目应在 运行 时间将新项目添加到 WPF ListBox 后立即着色为绿色。
private void dispatcherTimerMensagem_Tick(object sender, EventArgs e)
{
if (!(principalDB.testarConexãoDB()))
{
dispatcherTimerVendasFechadas.Stop();
dispatcherTimerMensagem.Stop();
LstMensagem.ItemsSource = null;
LbPbVendasFechadas.ItemsSource = null;
}
else
{
mensagem = principalDB.selectMessagemUsuario(null);
if (mensagem != string.Empty)
{
this.Activate();
LstMensagem.Opacity = 1;
LstMensagem.Items.Add(principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem);
voice.Voice = voice.GetVoices().Item(0);
myWorkerMensagem.WorkerReportsProgress = true;
myWorkerMensagem.WorkerSupportsCancellation = true;
myWorkerMensagem.RunWorkerAsync();
if (VisualTreeHelper.GetChildrenCount(LstMensagem) > 0)
{
Border border = (Border)VisualTreeHelper.GetChild(LstMensagem, 0);
ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
scrollViewer.ScrollToBottom();
}
}
else
{
LstMensagem.Opacity = 0.5;
}
}
}
所以 LstMensagem 将在 运行 时间从声明的变量中接收一个新项目,在这行代码中:
LstMensagem.Items.Add(principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem);
如果出现特定的 word/string,例如 "aproved",我希望该字符串具有不同的文本颜色,例如,刷成绿色。
使用 TextBlock 代替字符串。对于整个项目:
var text = principalDB.mensagemRemetente + " (" + principalDB.mensagemData + ")" + ": " + mensagem;
var tb = new TextBlock();
tb.Text = text;
if(text.Contains("aproved"))
tb.Foreground = Brushes.Green;
LstMensagem.Items.Add(tb);
仅针对项目的一部分,使用内联 属性 添加不同格式的文本:
var tb = new TextBlock();
tb.Inlines.Add(new Run { Foreground = Brushes.Green, Text =
principalDB.mensagemRemetente});
tb.Inlines.Add(" (" + principalDB.mensagemData + ")" + ": " + mensagem);
LstMensagem.Items.Add(tb);