RichTextBox用表情符号/图像替换字符串

时间:2017-08-04 07:22:45

标签: c# wpf richtextbox emoticons

在RichtTextBox中,我想用表情符号图像自动替换表情符号字符串(例如/* * Copyright © 2017 Maria Papadopoulou. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at ... */ )。 到目前为止我已经完成了它,除了当我在现有的单词/字符串之间写出表情符号字符串时,图像会被插入到行的末尾。

例如: :D
结果是: hello (inserting :D here) this is a message<<图像

另一个(微小的)问题是插入后插入符号位置在插入之前。

这就是我已经得到的:

hello this is a message ☺

2 个答案:

答案 0 :(得分:2)

错误的行是selection.Start?.Paragraph?.Inlines.Add(image);。您将图像追加到段落的末尾。您应该使用InsertBeforeInsertAfter方法之一。

但是要使用这些方法,您应该遍历Inlines并找到要在之前或之后插入的正确内联。这并不困难。您可以通过比较内联的selectionStartselectionEndElementStartElementEnd属性来确定内联。

另一个棘手的可能性是您要插入的位置可能属于内联。然后你应该拆分内联并创建其他三个:

  • 包含插入位置前的元素的文件
  • 包含图片的文件
  • 一个包含插入位置后的元素。

然后,您可以删除内联并将新的三个内联插入到正确的位置。

Wpf的RichTextBox没有最漂亮的API。有时可能很难使用。还有一个名为AvalonEdit的控件。它比RichTextBox更容易使用。你可能想要考虑它。

答案 1 :(得分:1)

正如@Yusuf Tarık Günaydın建议的那样,我查找了AvalonEdit控件,它可以轻松完成这个操作。

在此example的帮助下,我只需要创建一个import urllib import urllib.request from bs4 import BeautifulSoup as soup from selenium import webdriver import time myurl = 'https://twitter.com/search?q=australian%20megafauna&src=typd&lang=en' driver = webdriver.Firefox() driver.get(myurl) #scroll-automation using selenium lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;") match=False while(match==False): lastCount = lenOfPage time.sleep(3) lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;") if lastCount==lenOfPage: match=True page_html = driver.page_source page_soup = soup(page_html, "html.parser") print(page_soup.title.text) for tweet in page_soup.findAll('p', {'class': 'tweet-text'}, lang='en'): print(tweet.text) 来查找表情符号匹配并插入图像。

VisualLineElementGenerator