【问题标题】:C# WPF: Changing color of Text upon Character DetectionC# WPF:在字符检测时更改文本颜色
【发布时间】:2015-05-06 22:49:42
【问题描述】:

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

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

('console' 是我窗口中的文本框)

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

【问题讨论】:

  • console_TextChanged 表示当您键入文本并将焦点移出文本框时,它将被调用。您应该改用 KeyPress 事件。
  • 我明白了。但即使我使用 KeyPress,我也必须扫描以前输入的文本,看看“当前输入”的文本是否在评论标签内,伙计。我怎样才能做到这一点? @卢卡西斯
  • stackoverflow.com/questions/14085607/textbox-text-color-change 相同的问题,虽然没有好的答案。
  • 我看到了@Lucassith,但它没有为问题提供正确的答案

标签: c# wpf textbox textchanged


【解决方案1】:

您不能使用 TextBox 更改颜色的某些特定部分。在这种情况下,您需要 RichTextBox。您使用 PreviewTextInput 事件来获取键入的文本/字符。我编写了一些逻辑来使 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;
    }        
}

【讨论】:

  • 嘿,这是一个很好的开始!但是注释标签 /* 的开头有点故障,绿色没有出现。知道为什么吗?
  • 我想给出一个可以改进的想法。可能是完整的逻辑可能需要一段时间......
  • 当前,当您添加一些文本时,如果您在文本之间放置 /*,它会将绿色字体更改为文本的其余部分
  • 嘿,再次感谢您抽出宝贵的时间。我会玩一下,看看我能做什么。我现在会选择您的答案,但是如果您有时间并且想出更好的代码,请通过电子邮件将其发送给我,伙计 :) dinukawylde@gmail.com。谢谢先生。
  • 唯一的问题是必须稍后添加标签才能看到颜色。如何修改代码,使其在输入 /* 后立即改变颜色,Ayyappan?
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2013-04-17
  • 2014-02-02
相关资源
最近更新 更多