我可以动态地将TextBlock.Text的一部分变成不同的颜色吗?

我的主窗体中有TextBlock。 我在应用程序运行期间将Text属性设置为不同的字符串。

我希望能够为特定字符串的部分着色。

伪代码:

if(a < 0) txbStatus.Text = string.Format("{0} {1}", a, b); else txbStatus.Text = string.Format("{0} {1}", a, b); 

您可以按照自己想要的方式拆分字符串,然后使用foreach()循环进行拆分字符串尝试

 TextBlockName.Inlines.Add(new Run("colored text") {Foreground = Brushes.Blue}); 

TextBox的内容不必只是一个字符串,而是一个Inline的集合:

 txbStatus.Inlines.Clear(); txbStatus.Inlines.Add(new Run("normal color, ")); txbStatus.Inlines.Add(new Run("colored text") { Foreground = Brushes.Red }); 

我创建了一个自定义TextBlock,它可以帮助您突出显示TextBlock的“Text”值中的部分文本。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; namespace UI.WPF.UserControls { class CustomTextBlock:TextBlock { string _originalText; public string HighlighText { get { return (string)GetValue(HighlighTextProperty); } set { SetValue(HighlighTextProperty, value); RenderHighlightedText(); } } // Using a DependencyProperty as the backing store for HighlighText. This enables animation, styling, binding, etc... public static readonly DependencyProperty HighlighTextProperty = DependencyProperty.Register("HighlighText", typeof(string), typeof(CustomTextBlock), new FrameworkPropertyMetadata(new PropertyChangedCallback(HighlighTextProperty_Changed)) ); private static void HighlighTextProperty_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { CustomTextBlock textBlock = (CustomTextBlock)d; textBlock.RenderHighlightedText(); } public CustomTextBlock() : base() { } static CustomTextBlock() { DefaultStyleKeyProperty.OverrideMetadata( typeof(CustomTextBlock), new FrameworkPropertyMetadata(typeof(CustomTextBlock))); } public override void OnApplyTemplate() { base.OnApplyTemplate(); } protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); _originalText = Text; RenderHighlightedText(); } private Run GetFormatedText(string text, bool isBold) { Run noramlRun = new Run(text); if (isBold) { noramlRun.FontWeight = FontWeights.Bold; } else { noramlRun.FontWeight = FontWeights.Normal; } return noramlRun; } public void RenderHighlightedText() { var boldText = HighlighText; if (!string.IsNullOrEmpty(HighlighText) && _originalText.ToLower().Contains(boldText.ToLower())) { this.Inlines.Clear(); int point = _originalText.ToLower().IndexOf(boldText.ToLower()); string strHighlighted = _originalText.Substring(point, HighlighText.Length); Run runHighlight = GetFormatedText(strHighlighted, true); if (point == 0) { this.Inlines.Add(runHighlight); int remainingLength = _originalText.Length - (point + HighlighText.Length); string remaingText = _originalText.Substring((point + HighlighText.Length), remainingLength); this.Inlines.Add(GetFormatedText(remaingText, false)); } else { string firstPart = _originalText.Substring(0, point); this.Inlines.Add(GetFormatedText(firstPart, false)); this.Inlines.Add(runHighlight); int remainingLength = _originalText.Length - (point + HighlighText.Length); string remaingText = _originalText.Substring((point + HighlighText.Length), remainingLength); this.Inlines.Add(GetFormatedText(remaingText, false)); } } else { this.Inlines.Clear(); this.Inlines.Add(GetFormatedText(_originalText, false)); } } } } 

使用它的方法。

   

欲获得更多信息

https://sites.google.com/site/greateindiaclub/mobil-apps/windows8/highlightpartoftextinwpftextblockcontrol