WPF RichTextBox 的有条件滚动?

标签 wpf richtextbox

我有一个 RichTextBox在我的应用程序中,它正在获取有关某些事件的新内容。
添加新内容时,我想滚动到底部,仅当 卷轴在底部 之前 .
我该怎么做呢?
更具体地说,给我带来麻烦的部分是确定滚动位置。

如果重要的话,RichTextBox使用默认样式和模板,一些画笔更改或设置为 null,垂直滚动条可见性为 Auto 并且它是只读的。

最佳答案

如果您希望富文本框仅在滚动条被拖到底部时自动滚动新添加的文本,请将以下类添加到您的项目中

public class RichTextBoxThing : DependencyObject
{
    public static bool GetIsAutoScroll(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsAutoScrollProperty);
    }

    public static void SetIsAutoScroll(DependencyObject obj, bool value)
    {
        obj.SetValue(IsAutoScrollProperty, value);
    }

    public static readonly DependencyProperty IsAutoScrollProperty =
        DependencyProperty.RegisterAttached("IsAutoScroll", typeof(bool), typeof(RichTextBoxThing), new PropertyMetadata(false, new PropertyChangedCallback((s, e) =>
            {
                RichTextBox richTextBox = s as RichTextBox;
                if (richTextBox != null)
                {
                    if ((bool)e.NewValue)
                        richTextBox.TextChanged += richTextBox_TextChanged;
                    else if ((bool)e.OldValue)
                        richTextBox.TextChanged -= richTextBox_TextChanged;

                }
            })));

    static void richTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        RichTextBox richTextBox = sender as RichTextBox;
        if ((richTextBox.VerticalOffset + richTextBox.ViewportHeight) == richTextBox.ExtentHeight || richTextBox.ExtentHeight < richTextBox.ViewportHeight)
            richTextBox.ScrollToEnd();
    }
}

然后在您希望自动滚动行为的任何富文本框上添加 IsAutoSroll 属性
<RichTextBox ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" local:RichTextBoxThing.IsAutoScroll="True"/> 

关于WPF RichTextBox 的有条件滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456441/

相关文章:

c# - WPF RichTextBox PreviewKeyDown 和 OnTextChange 事件顺序与普通 TextBox 不同

wpf - 将资源绑定(bind)到自定义控件属性

wpf - WPF工具包折线图中y轴点之间的阴影区域

wpf - 屏蔽到 WPF 日期选择器

silverlight - 用于 silverlight 4 的 RichTextEditor

C# - 将大文件加载到 WPF RichTextBox 中?

c# - 计算富文本框中所有单词的最有效方法是什么?

c# - 如何以编程方式退出 WPF 应用程序?

c# - 在 C# 中使用多线程的正确方法

javascript - 在线富文本编辑器如何工作?