RichTextBox игнорирует нажатия клавиш (Home, End, PgUp, PgDn), когда IsReadOnly имеет значение true - PullRequest
2 голосов
/ 12 августа 2011

У меня есть элемент управления WPF RichTextBox, который я хочу вести себя как обычный RichTextBox во всех отношениях, за исключением того, что пользователь не может редактировать текст и курсор не отображается. У меня проблема в том, что когда я изменяю IsReadOnly на False, RichTextBox перестает реагировать на нажатия клавиш. Я хочу, чтобы он нормально реагировал на нажатия клавиш, такие как Home, End, PgUp, PgDn, Up, Down. В документации такое поведение не упоминается.

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

Я пытался добавить обработчик событий OnKeyDown, но он не срабатывает. Я наблюдал за событиями в Snoop, когда я нажимал клавиши с RichTextBox в фокусе клавиатуры, и в Snoop не появлялись запущенные события. Я попытался установить IsDocumentEnabled явно в True, но это также не имеет никакого эффекта. Я попытался обернуть RichTextBox в ScrollViewer, но это также не имеет никакого эффекта.

Любые предложения о том, как я могу сохранить это RichTextBox как IsReadOnly=True, но получить ожидаемое поведение нажатия клавиши RichTextBox?

1 Ответ

6 голосов
/ 12 августа 2011

Установите IsReadOnlyCaretVisible в True

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

Если вы не хотите, чтобы каретка была видимой, установите CaretBrush на Transparent

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