美文网首页
WPF中让TextBlock每一个字符显示不同的颜色

WPF中让TextBlock每一个字符显示不同的颜色

作者: 陈玉涛 | 来源:发表于2019-12-13 16:55 被阅读0次
        TextBlock Tips = mainWindow.FindName("imgTips") as TextBlock;
        Tips.Inlines.Clear();
        Tips.Inlines.Add(FormatText(info.Tips));
        static Color backColor = (Color)ColorConverter.ConvertFromString("#6AAEF2");
        static Dictionary<string, Func<string, Run>> keywords = new Dictionary<string, Func<string, Run>>()
        {
            {"step 01.", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"step 02.", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"step 03.", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"step 04.", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"视频下载", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"视频播放", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
            {"视频提取", s => new Run(s){Foreground = new SolidColorBrush(backColor)}},
        };
        static Inline FormatText(string text)
        {
            Span span = new Span();
            int startIndex = 0;
            while (true)
            {
                var hit = keywords.Keys.Select(k => new { word = k, index = text.IndexOf(k, startIndex) }).OrderBy(x => (uint)x.index).FirstOrDefault();
                if (hit.index < 0)
                {
                    span.Inlines.Add(new Run(text.Substring(startIndex)));
                    break;
                }
                span.Inlines.Add(new Run(text.Substring(startIndex, hit.index - startIndex)));
                span.Inlines.Add(keywords[hit.word](hit.word));
                startIndex = hit.index + hit.word.Length;
            }
            return span;
        }

相关文章

网友评论

      本文标题:WPF中让TextBlock每一个字符显示不同的颜色

      本文链接:https://www.haomeiwen.com/subject/sdzfnctx.html