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

2019-12-13  本文已影响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;
        }
上一篇 下一篇

猜你喜欢

热点阅读