5

私の目標は、新しい依存関係プロパティ SearchText を持つカスタム TextBlock コントロールを作成することです。このプロパティには正規表現が含まれます。TextBlock のテキスト内のこの正規表現のすべての出現箇所は、カスタム スタイル (別の DP) を使用して強調表示されます。

私の現在の実装では、TextBlock の InlineCollection 内のすべての Inline オブジェクトをクリアしています。次に、ハイライトされていないテキストのランとハイライトされたテキストのランで TextBlock を塗りつぶします (この方法では、TextBlock に直接インラインを追加することはできません。代わりに、TextBlock.TextProperty を使用する必要があります)。

うまく機能しますが、インラインをクリアしようとすると、奇妙な例外が発生することがあります。

この問題はこれに関連しているようです。TextChanged 関数でインラインを変更していますが、無限再帰編集を避けるためにフラグを使用しています。

このカスタム コントロールを設計する方法について何か考えはありますか? これを行うより良い方法はありますか?この例外を回避するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

3

これを完全に行うためのより良い方法があるかどうかはまだわかりませんが、回避策を見つけたようです。

TextProperty と SearchTextProperty の変更通知によって起動された関数でインライン/実行を更新していました。

ここで、DispatcherPriority.Normal を使用した変更通知で、Dispatcher.BeginInvoke() 呼び出しからハイライト/更新コードを起動しています。

于 2010-10-06T15:25:00.587 に答える
2

誰かがこれを行う方法の例を望んでいる場合に備えて、私はこれを見つけまし

于 2012-01-31T09:54:15.417 に答える