WPF RichTextBox滚动条自动滚动实例、文本自动滚动实例
说明:
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滚动条自动滚动实例、文本自动滚动实例的更多相关文章
- Android文字跑马灯控件(文本自动滚动控件)
最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...
- TextSwitcher实现文本自动垂直滚动
实现功能:用TextSwitcher实现文本自动垂直滚动,类似淘宝首页广告条. 实现效果: 注意:由于网上横向滚动的例子比较多,所以这里通过垂直的例子演示. 实现步骤:1.extends TextSw ...
- AutoCompleteTextView自动补全文本框
AutoCompleteTextView的作用是在输入框中输入我们想要输入的信息,就会出现其他与其相关的提示信息 下面是实例代码: MainActivity.java package com.shao ...
- ANTLR和StringTemplate实例:自动生成单元测试类
ANTLR和StringTemplate实例:自动生成单元测试类 1. ANTLR语法 要想自动生成单元测试,首先第一步就是分析被测试类.这里以Java代码为例,用ANTLR对Java代码进行分析.要 ...
- 页面滚动到底部自动 Ajax 获取文章
页面滚动到底部自动 Ajax 获取文章 代码如下 复制代码 var _timer = {};function delay_till_last(id, fn, wait) { if (_time ...
- [转]单例模式——C++实现自动释放单例类的实例
[转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...
- 添加zabbix自动发现(监控多tomcat实例)
说明 何为自动发现?首先我们监控多tomcat实例,如果一个个实例地添加或许可以完成当前需求.但是日后随着实例的增多,再手动一个个去添加就十分不方便了.这时候需要自动发现这个功能,来帮助我们自动添加监 ...
- kubernetes要实现的目标——随机关掉一台机器,看你的服务能否正常;减少的应用实例能否自动迁移并恢复到其他节点;服务能否随着流量进行自动伸缩
Kubernetes 是来自 Google 云平台的开源容器集群管理系统.基于 Docker 构建一个容器的调度服务.该系统可以自动在一个容器集群中选择一个工作容器供使用.其核心概念是 Contain ...
- 在 Linux 实例上自动安装并运行 VNC Server
原文网址:https://help.aliyun.com/knowledge_detail/41181.html?spm=5176.8208715.110.11.4c184ae8mlC7Yy 您可以使 ...
随机推荐
- Two shortest
sgu185:http://acm.sgu.ru/problem.php?contest=0&problem=185 题意:找两条最短路径,没有边相交的最短路劲,并且输出路径. 题解:这一题和 ...
- SQLserver 数据库
1.数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(Da ...
- 7.微软AJAX的解决方案
Asp.net中内置的简化AJAX开发的控件UpdatePanel非常方便,但是它会带了许多viewstate,所以高手们并不喜欢它.但它开发在内网应用时可以考滤 放入ScriptManager,将要 ...
- Andoir 判断软键盘是否弹出
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- WPF Application 执行顺序
public static void Main() { ApplicationClass.App app = new ApplicationClass.App();app.InitializeComp ...
- 事务Isolation Level 例子详解
举例分析: 我们有A表, 包含两条数据. Read uncommitted: 假设我们有两个事务 Trans1, Trans2. 它们的操作如下: Trans 1: 更新A1 -> A11, 然 ...
- 每天一个linux命令:mkdir
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...
- 使用LoadRunner对Web Services进行调用--Add Service Call
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- HDOJ/HDU 2567 寻梦(字符串简单处理)
Problem Description 每个人的童年都可能梦想过自己成为一个英雄,尤其是喜欢武侠的男生,Yifenfei也不例外. 童年的他常常梦想自己能成为一个绝世英雄,手拿一把灿灿发亮的宝剑,手挽 ...
- UIColor的使用
UIColor主要在设置各个控件的颜色的时候用得到,主要有以下几种方法创建UIColor: 1.使用RGBA创建: greenbluealpha]; 2.直接创建各个常用颜色: [UIColo ...