2

在 XAML 中,我设置了一个 Grid,其中包含一个 ScrollViewer,其中包含一个 TextBox:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_OnLoaded">
    <Grid>
        <ScrollViewer>
            <TextBox Name="TempTextBox" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"></TextBox>
        </ScrollViewer>
    </Grid>
</Window>

然后我(在 C# 中以编程方式)向该文本框添加了一堆文本。很多行。大多数情况下,垂直滚动按我的预期工作:我可以单击并拖动滚动条抓取;我可以点击抓取物上方或下方的滚动条;我可以使用向上和向下箭头键;我可以使用 Ctrl-Home 和 Ctrl-End。所有这些工作正常。但:

如果我使用 Page Up 或 Page Down 键,就好像我使用了 Ctrl-Home 或 Ctrl-End。也就是说,它转到文本的顶部或底部,而不是向上或向下一页。

难道我做错了什么?我很确定这不是“您的 Ctrl 键被卡住”之类的问题,因为 Page Up 和 Page Down 在我计算机上的其他应用程序中工作正常。

4

2 回答 2

5

移除 ScrollViewer。

TextBox 具有开箱即用的滚动支持,它不需要这个令人上瘾的控件“ScrollViewer”来进行滚动。在您的 TextBox 中设置 ScrollViewer.VerticalScrollBarVisibility="Auto",但不要用 ScrollViewer 包裹您的 TextBox,这样您就可以开始了。

您提供了两种相互冲突的滚动可能性。

我有一个带有 ScrollViewer.VerticalScrollBarVisibility="Auto" 的文本框,没有 ScrollViewer 和 Page Up 和 Page Down 工作正常。

为了测试,我在“TextBox”周围添加了“ScrollViewer”,然后它开始显示与您所说的相同的问题。

于 2013-05-07T05:26:17.763 回答
1

就我而言,我使用的是 RichTextBox,但我不能使用 RichTextBox 的原始滚动条,因为我还有另一个功能可以将 RichTextBox 的比例缩放ScaleTransform,

如果我使用RichTextBox原有的滚动条,滚动条的大小也会变大,我想避免它,所以我放弃使用RichTextBox的原有滚动条,转而使用ScrollViewer的滚动条,不会调整大小。

而且,我解决问题的方式 Page Up/Down keys goes all the way to the start/end Problem

就是在 RichTextBox 的 PreviewKeyDown 事件中编写 PageUp/PageDown 动作:

richTextBox.PreviewKeyDown += (sender2, e2) =>
{
    if (e2.Key == Key.PageUp)
    {
        richTextBox.Focus();
        //Use Code to Scroll Up 6 Lines  
        for (int j = 0; j < 6; j++)  
            EditingCommands.MoveUpByLine.Execute(null, richTextBox);
        e2.Handled = true;
    }
    if (e2.Key == Key.PageDown)
    {
        richTextBox.Focus();
        //Use Code to Scroll Down 6 Lines
        for (int j = 0; j < 6; j++)    
            EditingCommands.MoveDownByLine.Execute(null, richTextBox);
        e2.Handled = true;
    }
};

我受到帖子的启发:

WPF Datagrid 手动翻页和翻页事件处理

于 2017-03-02T06:54:28.417 回答