WPF中背景颜色不同时,如何用一种颜色突出显示列表框中文本的某些部分?

问题描述 投票:0回答:1

我有这些函数可以研究突出显示列表框中的文本。它有效,但现在我正在努力解决将突出显示文本的某个部分的部分。例如,当您有“Hello World to WPF”并且您想要突出显示整个文本时,请使用浅蓝色和任何其他颜色的“World”。我需要在这里做出什么改变?

private async void WriteHighlighttexts(ListBox Datalabel, Dictionary<long, List<string[]>> arraylog)
{
    Datalabel.Items.Clear();

    foreach (KeyValuePair<long, List<string[]>> pair in arraylog)
    {
        List<string[]> logwritehigh = pair.Value;

        // Set autoScroll to false before updating the content
        bool autoScroll = false;

        foreach (string[] pair2 in logwritehigh)
        {
            string Linecolour = pair2[0];
            await Task.Run(() =>
            {
                // Run the code in the background thread

                Dispatcher.Invoke(() =>
                {
                    // Append the line to the ListBox
                    ListBoxItem listBoxItem = new ListBoxItem();
                    listBoxItem.Content = pair2[1];
                    Datalabel.Items.Add(listBoxItem);

                    //// Ensure the text is fully updated before proceeding with highlighting
                    //Task.Delay(5).Wait();

                    // Highlight the entire line with the specified color
                    HighlightLine(listBoxItem, Linecolour);
                });
            });

            await Task.Delay(15);

            // Restore autoScroll to true after updating the content
            autoScroll = true;

            // Scroll to the end of the RichTextBox if autoScroll is enabled
            if (autoScroll)
            {
                Datalabel.ScrollIntoView(Datalabel.Items[Datalabel.Items.Count - 1]);
            }
        }
    }
}

private void HighlightLine(ListBoxItem listBoxItem, string color)
{
    System.Drawing.Color lineColor = ColorTranslator.FromHtml(color);
    SolidColorBrush brush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(lineColor.A, lineColor.R, lineColor.G, lineColor.B));

    listBoxItem.Background = brush;
}
c# wpf listbox highlight listboxitem
1个回答
0
投票

string
替换为具有可单独设置样式的
TextBlock
元素的
Inline
,例如:

// Append the line to the ListBox
ListBoxItem listBoxItem = new ListBoxItem();
string[] words = "Hello World to WPF".Split(' ');
TextBlock textBlock = new TextBlock();
if (words != null)
{
    foreach (string word in words)
    {
        Inline inline = new Run { Text = word };
        textBlock.Inlines.Add(inline);
        if (word == "World")
            inline.Background = Brushes.Yellow;
    }
}
listBoxItem.Content = textBlock;
Datalabel.Items.Add(listBoxItem);

HighlightLine(listBoxItem, Linecolour);
© www.soinside.com 2019 - 2024. All rights reserved.