WPF RichTextBox에서 선택한 토큰에 서식을 적용하고 있습니다. 이렇게하려면 내가 강조하고 싶은 토큰을 포함하는 TextRange를 얻습니다. 그런 다음 텍스트의 색을 다음과 같이 변경합니다.WPF RichTextBox - 입력 된 텍스트 서식 지정
// Get start and end pointer for token
TextPointer startPointer = run.ContentStart.GetPositionAtOffset(startOffset);
TextPointer endPointer = run.ContentStart.GetPositionAtOffset(endOffset);
// Get text range for token
TextRange textRange = new TextRange(startPointer, endPointer);
// Highlight token
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
내 RichTextBox의 TextChanged 이벤트에서 이러한 현상이 발생합니다.
서식이 예상대로 적용되지만 텍스트를 계속 입력하면 인접한 단어에 이미 적용된 서식이 새 텍스트로 상속됩니다. 새 텍스트 서식을 RichTextBox 속성에 정의 된 기본 서식 옵션을 사용하여 서식을 싶습니다. 이것이 가능한가?
또는 기본 서식 옵션으로 파란색으로 표시하지 않으려는 모든 토큰을 강조 표시 할 수 있지만 이는 나에게 어색한 느낌입니다.
답장을 보내 주셔서 감사합니다. 예, 이것은 표준적인 동작이지만 구문 강조를 구현하려고 시도했지만 오히려 그렇게하지 않았습니다. TextChanged 이벤트에서 TextRange를 만들기 위해 사용하는 시작 및 끝 위치가있는 토큰을 생성하는 파싱 루틴을 호출하고 있습니다 (원래의 질문에이 코드를 추가했습니다). 공백을 구분 기호로 사용하는 것은 가능하지만 공백이 보장되지 않으므로이를 피하는 것이 좋습니다. 감사합니다. Alan –
글쎄, 공백을 구분 기호로 사용할 필요는 없습니다. 내가 제안한 것은 커서가'endOffset + 1'에 올 때까지 스타일을 적용하기 위해서 기다리는 것이다. 그래서 커서와 텍스트 범위 사이에 뭔가가있다. 따라서'SomeToken |'* *을 입력하여 "n"을 입력 한 후에도 토큰이 아직 선택되지 않았습니다. 그러나 * next * 문자, 'SomeToken {|'을 입력하면 "{"(또는 다른 문자)를 입력하면 토큰이 발견되고 스타일이 적용됩니다. 구문 강조는 다른 프로그램에서와 비슷하게 작동하는 것으로 나타났습니다. 내가 분명하지 않으면 미안해. 그게 더 분명해지기를 바랍니다. –
다시 한번 감사드립니다.걱정 마세요, 당신은 아주 분명했습니다. 필자가 피하려고했던 것은 각 구문에 대해 서식을 완전히 다시 설정했지만 서식을 완전히 다시 설정하지 않으면 인접한 서식을 상속 할 때 RichTextBox의 동작이 나에게 문제가되는 상황을 여전히 볼 수 있습니다. 나는 행복한 매체가있을 것이라고 확신합니다. 감사합니다. Alan –