RitchTextBoxをよくわかっていなくて無駄に時間を食ってしまったので書き留めておきます
private void EmphasizePlaceholder(string targetWord)
{
// 最初のパラグラフを取得
var current = MessageField.Document.ContentStart;
// パラグラフ?に分かれて収まっているのでパラグラフ毎に処理する
while(current != null)
{
// テキスト以外はスルー
if(current.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
var text = current.GetTextInRun(LogicalDirection.Forward);
// 今回は1単語毎?にパラグラフに分かれるから1つだけということで
// 全角のワードとかだったら複数あることを想定したほうが良い
var index = text.IndexOf(targetWord);
if(index != -1)
{
var start = current.GetPositionAtOffset(index);
var end = current.GetPositionAtOffset(index + targetWord.Length);
// 色を変更する範囲を指定
var range = new TextRange(start, end);
// 色を変更
range.ApplyPropertyValue(TextElement.ForegroundProperty, placeholderColor);
}
}
// 次のパラグラフに
current = current.GetNextContextPosition(LogicalDirection.Forward);
}
}
※入力中随時反映したいときTextChanged
に書いてしまうとApplyPropertyValue
でテキストが変更された扱いになり無駄に何度も再帰的に呼び出すことになるからKeyUpとかの方が良い?