我正在为用户编写一个控制台,以便他们可以在其中编写类似于Visual Studio的代码。我想知道如果程序检测到某个字符的输入后如何更改WPF TextBox中的一组文本的颜色,例如 / * * / 注释标记。
当用户输入 / * 标记时,标记后面的文字应为绿色,当用户关闭标记时,文本应返回白色。我尝试使用TextChanged方法执行此操作,但我不知道如何继续。
('console'是我窗口中的TextBox)
private void console_TextChanged(object sender, TextChangedEventArgs e)
{
if (e.Changes.Equals("/*"))
{
console.Foreground = Brushes.Green;
}
}
答案 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;
}
}