说明:
1.后台代码添加测试 数据

2.使用 richTextBox.ScrollToVerticalOffset()方法,滚动竖直方向滚动条位置

3.使用定时器DispatcherTimer,修改页面显示数据

4.自己计算处理,已经滚动的高度位置

Xaml代码:

<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="205*"/>
<ColumnDefinition Width="87*"/>
</Grid.ColumnDefinitions>
<Button x:Name="button" Content="开始播放"
HorizontalAlignment="Left" Margin="2,36,0,0" VerticalAlignment="Top" Width="75" Grid.Column="1" Height="29" Click="button_Click"/>
<RichTextBox x:Name="richTextBox"
HorizontalAlignment="Left" Height="209" Margin="10,36,0,0" VerticalAlignment="Top" Width="170">
</RichTextBox>
</Grid>

后台添加测试数据代码:

public text4()
{
InitializeComponent(); richTextBox.Document = doc;
richTextBox.FontSize = ;
//添加内容
appendLine(null, "从你的全世界路过");
appendLine("one", "海上生明月");
appendLine(null, "从你的全世界路过");
appendLine(null, "天涯共此时");
appendLine("two", "张三丰");
appendLine(null, "从你的全世界路过");
appendLine(null, "鲁迅先生");
appendLine(null,null);
}
FlowDocument doc = new FlowDocument();
private void appendLine(string name, string line)
{
Paragraph p = new Paragraph();
if (string.IsNullOrEmpty(name) == false)
doc.RegisterName(name, p);
Run r = new Run(line);
p.TextAlignment = TextAlignment.Center;
p.Inlines.Add(r);
doc.Blocks.Add(p);
}

定时器显示控制代码:

int pIndex = ;
double curTop = ;
private void button_Click(object sender, RoutedEventArgs e)
{
//定时控制内容显示和滚动条位置
DispatcherTimer _timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds();
_timer.Tick += (st, et) =>
{
//获取指定行的内容
BlockCollection col = richTextBox.Document.Blocks;
int index = ;
TextElement prev = null;
foreach (TextElement item in col)
{
//修改当前行的样式
if (index == pIndex)
{
AlterStyle(item, prev);
}
index++;
prev = item;
}
pIndex++;
};
_timer.Start();
}
private void AlterStyle(TextElement item, TextElement prev)
{
//当前行
Paragraph cP = item as Paragraph;
cP.Foreground = Brushes.Red;
TextRange range = new TextRange(cP.ContentStart, cP.ContentEnd);
//滚动位置控制
if (pIndex > && range.Text.Length > )
{
//上一行,样式回调
if (prev != null)
{
prev.Foreground = Brushes.Black;
}
curTop += range.Text.Length > ? : ;
curTop += ;
richTextBox.ScrollToVerticalOffset(curTop);
}
}

运行结果:

WPF RichTextBox滚动条自动滚动实例、文本自动滚动实例的更多相关文章

  1. Android文字跑马灯控件(文本自动滚动控件)

    最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...

  2. TextSwitcher实现文本自动垂直滚动

    实现功能:用TextSwitcher实现文本自动垂直滚动,类似淘宝首页广告条. 实现效果: 注意:由于网上横向滚动的例子比较多,所以这里通过垂直的例子演示. 实现步骤:1.extends TextSw ...

  3. AutoCompleteTextView自动补全文本框

    AutoCompleteTextView的作用是在输入框中输入我们想要输入的信息,就会出现其他与其相关的提示信息 下面是实例代码: MainActivity.java package com.shao ...

  4. ANTLR和StringTemplate实例:自动生成单元测试类

    ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...

  5. 页面滚动到底部自动 Ajax 获取文章

    页面滚动到底部自动 Ajax 获取文章  代码如下 复制代码 var _timer = {};function delay_till_last(id, fn, wait) {    if (_time ...

  6. [转]单例模式——C++实现自动释放单例类的实例

    [转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...

  7. 添加zabbix自动发现(监控多tomcat实例)

    说明 何为自动发现?首先我们监控多tomcat实例,如果一个个实例地添加或许可以完成当前需求.但是日后随着实例的增多,再手动一个个去添加就十分不方便了.这时候需要自动发现这个功能,来帮助我们自动添加监 ...

  8. kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩

    Kubernetes 是来自 Google 云平台的开源容器集群管理系统.基于 Docker 构建一个容器的调度服务.该系统可以自动在一个容器集群中选择一个工作容器供使用.其核心概念是 Contain ...

  9. 在 Linux 实例上自动安装并运行 VNC Server

    原文网址:https://help.aliyun.com/knowledge_detail/41181.html?spm=5176.8208715.110.11.4c184ae8mlC7Yy 您可以使 ...

随机推荐

  1. App Store内购

    一.In App Purchase概览 Store Kit代表App和App Store之间进行通信.程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买.当用户需要购 ...

  2. iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法

    iOS程序集成的第三方库过多时,很容易出现某几个库同时用到了一样的函数库,也就是在你的程序link时会提示duplicate symbol,而重复的符号又不是由你自己程序的代码造成的,也就说没法通过直 ...

  3. 解决VS2005 VS2008 vs2010断点无效-源代码与原始版本不同

    网上说的方法:(额~但是我就是不能用.但是也贴出来) 方法1.直接把整个文件格式化了一次,断点就可以用了Ctrl + A全选菜单:编辑-〉高级-〉设置选定内容的格式 (Ctrl+K, Ctrl+F)通 ...

  4. android中保存一个ArrayList到SharedPreferences的方法

    保存: public static boolean saveArray() { SharedPrefernces sp=SharedPrefernces.getDefaultSharedPrefern ...

  5. 使用m2eclipse搭建Web项目

    这篇文章已经指导好了:http://www.cnblogs.com/quanyongan/archive/2013/04/21/3033838.html

  6. 【HDOJ】3183 A Magic Lamp

    RMQ. /* 3183 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...

  7. C++ Prime:switch内部的变量定义

    如果需要为某个case分支定义并初始化一个变量,我们应该把变量定义在块内,从而确保后面的所有case标签都在变量的作用域之外. case true: { // 正确,声明语句位于语句块内部 strin ...

  8. 【转】Android编译系统详解(三)——编译流程详解

    原文网址:http://www.cloudchou.com/android/post-276.html 本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 1.概述 编译Androi ...

  9. 常用google产品

      常用google产品 01.谷歌阅读器(Google Reader):网页版RSS阅读器,方便订阅,组织和分享新闻.有手机版. 02.谷歌相册服务(Google Picasa):提供照片的下载和编 ...

  10. poj 3169 Layout

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8610   Accepted: 4147 Descriptio ...