一、项目背景:

最近,做项目,因为是金融项目,客户登录交易的时候,有一个提示框,就是告知客户要“入市需谨慎”等等,想必大家都遇到这样的场景,当然,这种提示是没人会看的,不过作为交易所,这样的提示又必不可少的。

其实只有一个要求:

必须客户读完“确定”按钮和CheckBox才会生效----客户只要把滚动条拉倒底部,我们就认为他已经读完了

二、项目讲解

1.前端代码

前端代码,没有什么好解释的,很简单,就是一个RichTextBox

 <RichTextBox Grid.Row="0" Grid.ColumnSpan="2" x:Name="rtxtRiskContent"  HorizontalAlignment="Left"
AllowDrop="True" IsReadOnly="True" VerticalAlignment="Top" >
<FlowDocument x:Name="fdRiskContent" >
<Paragraph TextBlock.FontSize="20" TextAlignment="Center" TextBlock.FontWeight="Bold">
风 险 提 示 书
</Paragraph>
<Paragraph TextBlock.FontSize="14">
<TextBlock Padding="20 0,0,0" TextWrapping="Wrap" Text="都普特商品电子交易中心有限公司(以下简称"交易中心")上市商品的"/>
交易存在较大的风险,为控制交易客户(包括但不限于企业交易客户、个人交易客户)的风险,维护交易客户的合法权益,交易中心特作以下风险提示:
<LineBreak/>
<LineBreak/>
一、参与交易中心上市品种的交易对交易风险判断、风险承受、风险控制有较高要求;不具备相应风险判断、风险承受和风险控制能力的交易客户,谨慎入市。
<LineBreak/>
<LineBreak/>
二、因交易有较高风险,下列资金不适合入市交易:
用于治疗疾病、养老、购房、缴纳学费等生活必须支出的资金;贷款、借款及受他人委托管理的非自有资金;
交易中心建议交易客户入市交易的资金总量不应超过自有存量资金的30%。
<LineBreak/>
<LineBreak/>
三、交易客户应当妥善保管自有交易账号的交易密码、资金密码及其他账户密码,不应委托任何机构或个人进行交易和资金管理。
<LineBreak/>
<LineBreak/>
四、交易客户应认真学习了解现货交易市场的规则和行情,根据个人投资经验、投资目标、财务状况自主做出交易选择,不应轻信任何机构和个人做出的收益承诺、行情分析和交易操作建议。
<LineBreak/>
<LineBreak/>
五、上述风险提示为交易开户前必读之内容,个人交易客户开户成功视为已完全理解交易中心风险提示的内容,并承诺遵守。个人交易客户因违反上述承诺导致亏损和其他交易损失的,交易中心不承担任何责任。
<LineBreak/>
</Paragraph>
</FlowDocument>
</RichTextBox>
<CheckBox x:Name="chkRiskTip" Grid.Row="2" Grid.ColumnSpan="2" IsEnabled="False" Content="本人已仔细阅读完全理解风险提示的所有内容,全面了解交易风险,并承诺按风险提示书
控制交易风险,因违反风险提示书的建议进行开户交易导致损失的,一切损失本人自愿承担。" />
<Button x:Name="btnAgreen" Grid.Row="4" Grid.Column="0" Width="100" Content="同 意" IsEnabled="False" ></Button>
<Button x:Name="btnNoAgreen" Grid.Row="4" Grid.Column="1" Width="100" Content="不同意" ></Button>
<Label Margin="0,0,100,0" HorizontalAlignment="Right" Grid.Row="6" Grid.ColumnSpan="2" Foreground="Red" Content="提示:完整阅读风险提示书后才可操作按钮" />

2.后台实现

我们主要要实现RichTextBox的事件,我们把事件放在资源文件里:

 <Grid.Resources>
<Style TargetType="{x:Type RichTextBox}">
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<EventSetter Event="ScrollViewer.ScrollChanged" Handler="RichTextBox_ScrollChanged"/>
</Style>
</Grid.Resources>

3.实现事件

 private void RichTextBox_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
try
{
ScrollViewer sv = e.OriginalSource as ScrollViewer;
if (sv != null && e.VerticalChange != 0)
{
if (sv.VerticalOffset == sv.ExtentHeight - sv.ViewportHeight)//到底
{
this.chkRiskTip.IsEnabled = true;
}
}
}
catch
{ }
}

三、结果截图

很简单,希望有对需要的有帮助。

WPF RichTextBox 做内容展示框 滚动条控制判定是否阅读完成的更多相关文章

  1. WPF RichTextBox读取存储文本的方法和常用属性

    1. 取得已被选中的内容: (1)使用 RichTextBox.Document.Selection属性(2)访问RichTextBox.Document.Blocks属性的“blocks”中的Tex ...

  2. WPF RichTextBox 控件常用方法和属性

    以下内容转自 http://blog.csdn.net/yulongguiziyao/article/details/25330551. 1. 取得已被选中的内容: (1)使用 RichTextBox ...

  3. WPF RichTextBox相关总结

    由于公司涉及到聊天对话框的功能,就想到了RichTextBox,查阅相关资料,总结下: 一.RichTextBox的内容相关的类 1.1RichTextBox的内容结构 RichTexBox是个可编辑 ...

  4. WPF RichTextBox自动调整高度

    原文:WPF RichTextBox自动调整高度 大概两年前的这个时间段,当时做项目遇到了一个问题:环境VS2005.WinForm,需要RichTextBox根据内容自动调整高度.当时用了各种方法都 ...

  5. WPF RichTextBox 当前光标后一个字符是文档的第几个字符

    WPF RichTextBox 当前光标后一个字符是文档的第几个字符 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-05 参考: TextP ...

  6. Selenium入门11 滚动条控制(通过js)

    这一节要有js基础.做web端的UI自动化必须要有html,css,javascript前端基础. 滚动条控制: 1 移动垂直滚动条 document.documentElement.scrollTo ...

  7. WPF RichTextBox 禁止换行

    原文:WPF RichTextBox 禁止换行 这个问题困扰了好久,进过不断的努力,终于解决了           <RichTextBox Margin="0,44,10,0&quo ...

  8. 将RichTextBox的内容直接写入数据库:

    将RichTextBox的内容直接写入数据库: private void button1_Click(object sender, EventArgs e) {    System.IO.Memory ...

  9. WPF RichTextBox的使用总结

    RichTextBox内容模型 RichTextBox 支持基于块的内容模型. RichTextBox   的内容属性为 Blocks,这是 Paragraph 元素的集合Paragraph元素可包含 ...

随机推荐

  1. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

  2. 通过配置web.config使WCF向外提供HTTPS的Restful Service

    如何通过WCF向外提供Restful的Service请看如下链接 http://www.cnblogs.com/mingmingruyuedlut/p/4223116.html 那么如何通过对web. ...

  3. 【iOS atomic、nonatomic、assign、copy、retain、weak、strong】的定义和区别详解

    一.atomic与nonatomic 1.相同点 都是为对象添加get和set方法 2.不同点 atomic为get方法加了一把安全锁(及原子锁),使得方法get线程安全,执行效率慢 nonatomi ...

  4. 展开easyui 树节点到某个点

    $(function () { $('#tt').tree({ url: '/IS/Department/JsonTree?companyID=@(Request.QueryString[" ...

  5. mac rvm升级ruby

    rvm是什么?为什么要安装rvm呢,因为rvm可以让你拥有多个版本的Ruby,并且可以在多个版本之间自由切换.第一步:安装rvm $ curl -L get.rvm.io | bash -s stab ...

  6. 使用js-xlsx库,前端读取Excel报表文件

    在实际开发中,经常会遇到导入Excel文件的需求,有的产品人想法更多,想要在前端直接判断文件内容格式是否正确,必填项是否已填写 依据HTML5的FileReader,可以使用新的API打开本地文件(参 ...

  7. Linux tricks

    Environment Settings Path Globally set path is in /etc/profile; or the user's .bash_profile for part ...

  8. bzoj1024搜索

    进度1/10mark(感觉完不成了) 事实上我刚看到题目一下子慌了,,,我在想怎么二分一块的长宽,然后验证 然而极其难写 于是想有没有暴力,举一些例子模拟一下 然后发现切割是有很明显的限制的:每次切割 ...

  9. tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...

  10. JavaScript 中string方法

    注意:JavaScript的字符串是不可变的(immutable),String类定义的方法不能改变原来字符串内容,例如String.toUpperCase()这样的方法,返回的是全新的字符串,而不是 ...