C#WPF:在字符检测时更改文本的颜色

时间:2015-05-06 13:20:12

标签: c# wpf textbox textchanged

我正在为用户编写一个控制台,以便他们可以在其中编写类似于Visual Studio的代码。我想知道如果程序检测到某个字符的输入后如何更改WPF TextBox中的一组文本的颜色,例如 / * * / 注释标记。

当用户输入 / * 标记时,标记后面的文字应为绿色,当用户关闭标记时,文本应返回白色。我尝试使用TextChanged方法执行此操作,但我不知道如何继续。

('console'是我窗口中的TextBox)

private void console_TextChanged(object sender, TextChangedEventArgs e)
{
      if (e.Changes.Equals("/*"))
      {
             console.Foreground = Brushes.Green;
      }
}

1 个答案:

答案 0 :(得分:0)

您无法使用TextBox更改某些特定颜色部分。在这种情况下,您需要RichTextBox。您使用PreviewTextInput事件来获取键入的text / char。我写了一些逻辑,以便在键入特定的char时更改RichTextBox的前景。我认为你可以在这段代码中构建你的逻辑。

 <RichTextBox x:Name="rtb" Width="200" Height="200" PreviewTextInput="rtb_PreviewTextInput"/>

 public partial class MainWindow : Window
{
    string prevText=string.Empty;
    TextPointer start;
    public MainWindow()
    {
        InitializeComponent();            
    }      
    private void rtb_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        if (e.Text.Equals("*") && (prevText.Equals("/")))
        {
            start = rtb.CaretPosition;
            TextPointer end = rtb.Document.ContentEnd;
            TextRange range = new TextRange(start, end);
            range.ApplyPropertyValue(RichTextBox.ForegroundProperty, Brushes.Green);
        }
        if (e.Text.Equals("/") && (prevText.Equals("*")))
        {                
            TextPointer end = rtb.CaretPosition; 
            TextRange range = new TextRange(start, end);
            range.ApplyPropertyValue(RichTextBox.ForegroundProperty, Brushes.Red);
        }
        prevText = e.Text;
    }        
}