首页 新闻 搜索 专区 学院

请问一下,在WPF中怎么鼠标选中复制TextBlock上面的文本

0
悬赏园豆:30 [已解决问题] 解决于 2015-08-04 21:10

TextBlock上面有一段文本,可以做到选中复制,就像网页上面的文字,鼠标一划,就可以选中复制这句话。

分进合击的主页 分进合击 | 初学一级 | 园豆:127
提问于:2015-08-04 19:23
< >
分享
最佳答案
0

因为textblock并没有支持支持的selectXXX相关事件,所以要实现你的效果可以通过鼠标事件来处理,例如:

1.定义事件

 this._textblock.PreviewMouseLeftButtonDown += _textblock_PreviewMouseLeftButtonDown;
 this._textblock.PreviewMouseLeftButtonUp += _textblock_PreviewMouseLeftButtonUp;

2.事件处理

 Point _startMousePosition;
 TextPointer _startPt;
        void _textblock_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            Point lastMousePosition = e.GetPosition(this._textblock);
            TextPointer tp = this._textblock.GetPositionFromPoint(lastMousePosition, true);
            TextRange tr = new TextRange(_startPt, tp);
            string seltext = tr.Text;
            MessageBox.Show(seltext);
        }

        void _textblock_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            _startMousePosition = e.GetPosition(this._textblock);
            _startPt = this._textblock.GetPositionFromPoint(_startMousePosition, true);
        }

 

实现了文本的选择接下来就是你自己的复制操作了,但是这种做法存在一个问题就是你无法直接看到类似网页那种选中文本的效果(例如textbox选择文本时候有遮罩的效果),要解决这个问题你可以使用装饰器来做个"选择文本时候遮罩的效果”

 

以上是基于textBlock的,我觉得为了避免很多不要的处理,可以考虑直接重写textbox来实现你的需求,这样会简单很多,textbox和textblock一个很大的区别其实就是一个支持编辑一个不支持直接编辑而已

收获园豆:30
visonme | 小虾三级 |园豆:1674 | 2015-08-04 20:28

 嗯,懂了,多谢了,非常感谢你的回答。

分进合击 | 园豆:127 (初学一级) | 2015-08-04 21:07
其他回答(1)
0

同楼上说的用 TexBox 替代,不过不用重写,设置 ReadOnly 属性就行了

明Lam | 园豆:595 (小虾三级) | 2015-08-04 20:48

也很感谢你的回答。我首先考虑textblock是因为它里面的字体可以用多种颜色。

支持(0) 反对(0) 分进合击 | 园豆:127 (初学一级) | 2015-08-04 21:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册