2011-07-20 14 views
2

私は現在WPF RichTextBoxでWindowsフォームアプリケーション(基本的にはドキュメントエディタ)を開発中です。もちろん、残りはすべてWindowsフォームアプリケーションなので、ElementHost内にWPF RichTextBoxをホストします。フォーカスを失った後にElementHost内のWPF RichTextBoxで選択を表示

問題は、フォーカスがない場合でも、RichTextBoxの選択を表示したままにしておきたいことです。たとえば、ツールバーにいくつかのテキスト書式設定ボタン(太字、斜体、...)があり、そのうちの1つを押すと、RichTextBoxがフォーカスを失うため、現在は選択肢が表示されなくなります。

残念ながら、RichTextBoxには一部のWinFormsコントロールのようなHideSelectionプロパティはありません。

他の投稿に記載されているようにLostFocusイベントをキャンセルしようとしました。しかし、これは、RichTextBoxがElementHost内でホストされているときには動作していないようです(試してみましたが、WPFのみのプロジェクトで動作しました)。

また、フォーカスを失う/獲得する際に選択背景色の設定/リセットを少し実験しましたが、これは非常にハッキリしているようで、確実に動作させるために多くの努力をしています。

どのように達成できたか考えている人はいますか?

ありがとうございました!

答えて

0

私は解決策を見つけた:

は、(0の高さで)あなたのElementHostに2つ目のリッチテキストボックスを追加します。あなたのリッチテキストボックスののLostFocusで
は、次の操作を行います。

bool firstLost = true; 

void yourRichTextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
     e.Handled = true; 

     if (firstLost) 
     { 
      yourRichTextBox.Focus(); 
      firstLost = false; 
     } 
     else 
     { 
      firstLost = true; 
     } 

     invisibleRichTextBox.Focus(); 
} 

だから、目に見えないリッチテキストボックス(そうe.Handled = true;作品正しい)に与えるフォーカスを取得し、あなたがあなたのWinForms、コントロールにやりたいことができます。

フォーカスのみが同じフォームのコントロールに設定されます。親フォームをWPF-RichTextBoxから直接離しておくと、選択ハイライトが失われます。

編集: フォームからDeactivateイベントをキャッチし、yourRichTextBoxにフォーカスを当てて、invisivleRichTextBoxにフォーカスを当てることができます(LostFocusイベントは発生していないようです)。だからあなたは直接あなたのフォームから離れることになります。

+0

あなたのソリューションはこれまで完全に動作しているようです。どうもありがとうございます! – andreas

関連する問題