关于WPF中TextBox行的选择与显示的问题

  最近做了一个小工具,其中用到了WPF中的TextBox控件。对于这个控件的使用,其中主要的一个功能是需要选择指定的行,并将其显示在控件可见区域的视图中(如果不在可视区域时,需要控件自动滚动到改行)。在我使用时,发现一个问题,如果当我先将指定的行滚动至视图中,然后在将其选中,则经常会不稳定,有时能定位并选中,有时则会选中错误位置,或者报错。现在我想将我遇到的问题以代码的方式进行说明,以及我的解决方案。不过,目前其原因还未搞明白,如果有高人,还请给予指点。

        首先,在自定义控件中添加一个TextBox控件,命名为txtBoxDocument,并在控件中提供两个公共方法GoToLine(int rowIndex)和SelectedLine(int rowIndex),用来定位并滚动至指定行和选中改行。

 但是,采用正确的调用顺序的方式不论是GetLineText(rowIndex).Length方式获取指定行的文本长度还是使用GetLineLength(rowIndex)方式获取指定行的文本长度,都是没问题的。具体缘由尚不明确,也没有查到相关的资料介绍。我自己的理解是在进行ScrollToLine(rowIndex)操作之前,先选中指定行的文本,此时,文本内容没有进行滚动,是个静止的状态,当先进行滚动在去选中指定文本,文本内容是个动态滚动的,可能此时.NET运行时需要做某些处理,因此,此时去获取指定行的文本长度或文本内容则容易出现问题。另外,认为文本内容滚动之后对于在可视范围内显示的文本相对于文本框的上边界的距离发生了变化,这也有可能是一个因素。不知道猜测是否正确,还希望各位大侠、专家给予指正,也好将其原理分享给其他程序员朋友。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值