说明:
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. nbtstat Linux版源码, 通过IP获取主机名

    nbtstat Linux版, 通过IP获取主机名/* NETBIOS name lookup tool - by eSDee of Netric (www.netric.org) * yeh.. i ...

  2. MapReduce扩展:应用程序如何运行于Hadoop Yarn之上

    1. 背景   “应用程序运行于Hadoop Yarn之上”的需求来源于微博运维数据平台中的调度系统,即调度系统中的任务需要运行于Hadoop Yarn之上.这里的应用程序可以简单理解为一个普通的进程 ...

  3. 如何将Java源代码文件的编码从GBK转为UTF-8?

    有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 ...

  4. Json 的日期格式转换成DateTime

    JSON 的日期形式:”/Date(1242357713797+0800)/” , 下面我们就用以下C#的方法将他转换成DateTime类型: /// <summary> /// Json ...

  5. NVIDIA CG语言 函数之所有数学类函数(Mathematical Functions)

    数学类函数(Mathematical Functions) abs(x) 返回标量和向量x的绝对值 如果x是向量,则返回每一个成员的绝对值 acos(x) 返回标量和向量x的反余弦 x的范围是[-1, ...

  6. Unity Twist Effect Black Hole

    Shader "Hidden/Twist Effect" {Properties { _MainTex ("Base (RGB)", 2D) = "w ...

  7. Poj 2887-Big String Splay

    题目:http://poj.org/problem?id=2887       Big String Time Limit: 1000MS   Memory Limit: 131072K Total ...

  8. PHP 小代码

    //获取网上的一个文件function getUrlImage($url, $file = '', $maxExe = 0, $safe = false){ $urlExt = explode('.' ...

  9. 【PHP】将EXCEL表中的数据轻松导入Mysql数据表

    在网络上有不较多的方法,在此介绍我已经验证的方法. 方法一.利用EXCEL表本身的功能生成SQL代码 ①.先在“phpmyadmin”中建立数据库与表(数据库:excel,数据表:excel01,字段 ...

  10. Service的两种启动方法

    刚才看到一个ppt,介绍service的两种启动方法以及两者之间的区别. startService 和 bindService startService被形容为我行我素,而bindService被形容 ...