2011-08-11 8 views
1

私は通常のRichTextBoxのように振る舞いたいWPF RichTextBoxコントロールを持っています。可視。私が抱えている問題は、IsReadOnlyFalseに変更すると、RichTextBoxはキーストロークに反応しなくなります。私はそれがホーム、エンド、PgUp、PgDn、アップ、ダウンのようなキーストロークに正常に応答したい。 documentationにはこの動作は記載されていません。IsReadOnlyがtrueの場合、RichTextBoxはキーストローク(Home、End、PgUp、PgDn)を無視します。

<RichTextBox 
    IsReadOnly="True" 
    ScrollViewer.VerticalScrollBarVisibility="Visible" 
    Width="65" Height="20"> 
    <FlowDocument> 
     <Paragraph> 
      Line 1 
      Line 2 
      Line 3 
     </Paragraph> 
    </FlowDocument> 
</RichTextBox> 

OnKeyDownイベントハンドラを追加しようとしましたが、起動しません。キーボードフォーカスでRichTextBoxのキーを押すとSnoopでイベントを監視し、発生したイベントはSnoopに表示されません。私はTrueに明示的にIsDocumentEnabledを設定しようとしましたが、それも効果がありません。私はScrollViewerRichTextBoxをラップしようとしましたが、これは効果がありません。

RichTextBoxIsReadOnly=Trueとしてどのように維持することができますか?RichTextBoxの予想されるキーストロークの動作を得るにはどうすればよいですか?真

<RichTextBox IsReadOnly="True" 
      IsReadOnlyCaretVisible="True" 
      ... /> 

+0

CaretBrushを設定し、あなたがPreviewKeyDownイベントハンドラを使用すると、押されたキーを確認してください。私は@Meleakが提供するソリューションを好むが、手動で行う方法のコード例がここにある:https://gist.github.com/1915136 –

答えて

5

設定IsReadOnlyCaretVisibleあなたはキャレットが見えるようにしたくない場合は、その後、リッチテキストボックスについてTransparent

<RichTextBox IsReadOnly="True" 
      IsReadOnlyCaretVisible="True" 
      CaretBrush="Transparent" 
      ... /> 
関連する問題