0

複雑なデータを表示するためにWPFを使用しています(レポートを考えてください)。今、それを全文検索する必要があります。現在、これを行うには、ビジュアルツリーを歩いてテキストブロックを探します。これはUIスレッドで行う必要があるようですよね?ここでの問題は、UIブロック全体で次の一致が見つかるまでにかなりの時間がかかる可能性があることです。

この問題を回避する方法はありますか?UIオートメーションを使用することはできますが、一致するものを見つけたら、それを強調表示するにはどうすればよいですか?UIオートメーションを使用すると、UIエレメントの実際のオブジェクトインスタンスへの参照を取得できないため、その上に装飾を配置することはできません。

WPFの全文検索は通常どのように実装されますか?XPSビューアーはどのようにそれを行いますか?

4

2 に答える 2

1

ビジュアル ツリーのクエリは UI スレッドで実行する必要があり、UI オートメーションはコンピューターの前に座っている人と同様の方法でのみアプリケーションとやり取りできるため、アクセスできないという点で正しいです。実際のコントロール (人がしないのと同じように)。

これにアプローチする正しい方法は、UI を脇に置き、代わりにデータ ソース (MVVM のモデル) でテキストを検索することです。結局のところ、UI 自体ではなく、UI によって表示される情報を本当に検索したいのです。

于 2010-01-18T08:33:27.920 に答える
0

wpf は自動的に inotifypropertychanged を ui スレッドにマーシャリングするため、別のスレッドで処理を行ってプロパティを設定できます。これを行う方法は、コードの構造によって異なります。たとえば、mvvm を使用していますか? そうでない場合は、ディスパッチャを使用して UI のメソッドを呼び出す必要があります。コード構造についてもう少し情報を返信していただければ、より明確な回答を提供できるはずです。mvvm を使用していない場合でも、処理を実行できる非 ui データソースで wpf データバインディングを使用すると、明示的なマーシャリングを回避できます。

于 2010-01-18T08:30:48.917 に答える