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 您可以使 ...
随机推荐
- [CF Round #294 div2] D. A and B and Interesting Substrings 【Map】
题目链接:D. A and B and Interesting Substrings 题目大意 给定26个小写字母的权值,一共26个整数(有正有负). 给定一个小写字母组成的字符串(长度10^5),求 ...
- TCP三次握手和http过程
pc浏览服务器网页此过程不包括域名查询,只描述TCP与http数据流的变化.一.pc与http服务器进行三次握手来建立连接.1.pc:seq=0 ack=0 syn=1 ack=0 发送给服务器建立同 ...
- 修炼debug
常用方法: alert console.log 行号手工打breakpoints 手工加入debugger:配合条件if(){debugger;} break on dom modify eventL ...
- 修改EditText的光标位置
Android 的 EditText 控件默认获取焦点的时候, 插入光标是在第一个位置的,如果EditText中设置了文本, 这个时候光标是在文本的最前面, 而不是文本的最后. 为了方便用户使用, 需 ...
- Linux Shell 学习笔记
2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事
1.1 手机常见分辨率: 4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA)HVGA 480*320 (Half ...
- Linux 关机命令 重启命令
Linux centos重启命令: 1.reboot2.shutdown -r now 立刻重启(root用户使用)3.shutdown -r 10 过10分钟自动重启(root用户使用)4.shut ...
- R语言 一元线性回归
#一元线性回归的基本步骤#1.载入数据 给出散点图 x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23) y< ...
- Google Map API 代码示例
- 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...