2010-04-05 3 views
2

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 속성에 정의 된 기본 서식 옵션을 사용하여 서식을 싶습니다. 이것이 가능한가?

또는 기본 서식 옵션으로 파란색으로 표시하지 않으려는 모든 토큰을 강조 표시 할 수 있지만 이는 나에게 어색한 느낌입니다.

답변

3

표준 동작이 아닙니까? Word에서 텍스트를 강조 표시 한 경우 굵게 표시하고 해당 텍스트 옆에 커서를 놓고 입력하면 새 텍스트도 굵게 표시됩니다. 나는 MS가 풍부한 텍스트 박스를 Word의 텍스트 영역과 비슷하게 작동 시켰다고 생각한다.

구문 강조와 같은 몇 가지 기준과 일치하는 토큰을 선택하는 경우 다음에 커서가 토큰에서 1 문자 떨어져있는 경우 스타일을 텍스트에 적용 해 볼 수 있습니까? 예 :

SomeToken | 대신

SomeToken의

|

여기서 |은 커서입니다. 커서는 첫 번째 예에서 공백으로 토큰과 구분되므로 프로그램에서 SomeToken을 찾으면 S 전에서 (공백) 전에 텍스트 범위를 가져옵니다. 그 스타일은 새로 입력 된 텍스트에 적용되지 않을 것이라고 생각합니다.

나는 이것이 단지 추측이며, 귀하의 문제 설명에서 정확한 상황을 오해했을 수도 있음을 인정합니다. 추가 코드, 특히 언급 한 TextChanged 이벤트 또는 텍스트 범위를 만드는 코드가 도움이 될 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 예, 이것은 표준적인 동작이지만 구문 강조를 구현하려고 시도했지만 오히려 그렇게하지 않았습니다. TextChanged 이벤트에서 TextRange를 만들기 위해 사용하는 시작 및 끝 위치가있는 토큰을 생성하는 파싱 루틴을 호출하고 있습니다 (원래의 질문에이 코드를 추가했습니다). 공백을 구분 기호로 사용하는 것은 가능하지만 공백이 보장되지 않으므로이를 피하는 것이 좋습니다. 감사합니다. Alan –

+0

글쎄, 공백을 구분 기호로 사용할 필요는 없습니다. 내가 제안한 것은 커서가'endOffset + 1'에 올 때까지 스타일을 적용하기 위해서 기다리는 것이다. 그래서 커서와 텍스트 범위 사이에 뭔가가있다. 따라서'SomeToken |'* *을 입력하여 "n"을 입력 한 후에도 토큰이 아직 선택되지 않았습니다. 그러나 * next * 문자, 'SomeToken {|'을 입력하면 "{"(또는 다른 문자)를 입력하면 토큰이 발견되고 스타일이 적용됩니다. 구문 강조는 다른 프로그램에서와 비슷하게 작동하는 것으로 나타났습니다. 내가 분명하지 않으면 미안해. 그게 더 분명해지기를 바랍니다. –

+0

다시 한번 감사드립니다.걱정 마세요, 당신은 아주 분명했습니다. 필자가 피하려고했던 것은 각 구문에 대해 서식을 완전히 다시 설정했지만 서식을 완전히 다시 설정하지 않으면 인접한 서식을 상속 할 때 RichTextBox의 동작이 나에게 문제가되는 상황을 여전히 볼 수 있습니다. 나는 행복한 매체가있을 것이라고 확신합니다. 감사합니다. Alan –