0

所以我想要的是在运行时是否将特定单词添加到列表框行/项目中,因为我正在使用计时器在运行时从我的数据库中添加项目,我希望该特定单词/字符串具有不同颜色。

即:所有添加的包含字符串/单词“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);

如果出现特定的单词/字符串,例如“已批准”,我希望该字符串具有不同的文本颜色,例如,刷成绿色。

4

1 回答 1

1

使用 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);

仅对于部分项目,使用 Inlines 属性添加不同格式的文本:

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);
于 2017-08-28T22:18:04.993 回答