【问题标题】:RichTextBox ignores keystrokes (Home,End,PgUp,PgDn) when IsReadOnly is true当 IsReadOnly 为 true 时,RichTextBox 会忽略击键(Home、End、PgUp、PgDn)
【发布时间】:2011-08-12 06:13:48
【问题描述】:

我有一个 WPF RichTextBox 控件,除了用户无法编辑文本并且插入符号不可见之外,我希望它在各方面都表现得像普通的 RichTextBox。我遇到的问题是,当我将 IsReadOnly 更改为 False 时,RichTextBox 停止对击键做出反应。我希望它能够正常响应 Home、End、PgUp、PgDn、Up、Down 等击键。 documentation 没有提到这种行为。

<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 中没有显示任何触发的事件。我尝试将IsDocumentEnabled 明确设置为True,但这也没有效果。我尝试将RichTextBox 包装在ScrollViewer 中,但这也没有效果。

关于如何将RichTextBox 维护为IsReadOnly=True,但获得RichTextBox 的预期击键行为的任何建议?

【问题讨论】:

  • 对于 RichTextBox,您将使用 PreviewKeyDown 事件处理程序,然后检查按下的键。我更喜欢@Meleak 提供的解决方案,但这里有一个如何手动操作的代码示例:gist.github.com/1915136

标签: wpf xaml richtextbox


【解决方案1】:

IsReadOnlyCaretVisible 设置为真

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

如果您不希望插入符号可见,请将 CaretBrush 设置为 Transparent

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

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 2010-11-28
    • 2016-06-26
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多