我试着解决这个问题。我已经为文本和文档属性绑定了richTextBox,此控件来自扩展WPF工具包中的richTextBox。
我的场景是:用户正在向richTextBox输入一些文本,如果他写了文本表情符号,我希望将这个文本表情符号转换为图像表情符号,并在richTextBox中显示他。
例如: Hello :) -> Hello IMAGE_SMILE
我有自己的类,它将带有表情的字符串转换为带有文本和图像的段落类型。
以下是:
public Paragraph ConvertToMessageWithEmoticons(string rpText){...}在WPF应用程序中,我在richTextBox控件的文本和文档属性上绑定属性。
//bind on Text property of richTextBoxControl
public string RtbText
{
get { return _rtbText; }
set
{
_rtbText = value;
NotifyPropertyChanged("RtbText");
}
}
//bind on Document property of richTextBoxControl
public FlowDocument RtbFlowDocument
{
get { return _rtbFlowDocument; }
set
{
_rtbFlowDocument = value;
NotifyPropertyChanged("RtbFlowDocument");
}
}我对.NET (Rx)使用了反应性扩展,并在属性RtbText上设置了观察者
Observable.FromEvent<PropertyChangedEventArgs>(this, "PropertyChanged")
.Where(e => e.EventArgs.PropertyName == "RtbText")
.Select(_ => this.RtbText)
.Where(text => text.Length > 1)
.Do(AddSmiles)
.Throttle(TimeSpan.FromSeconds(500))
.Subscribe(AddSmiles);我的问题是,如何优雅地用微笑代替文字,用表情符号代替文字。我试试看:
private void AddSmiles(string text)
{
Paragraph paragraph = _smileConverter.ConvertToMessageWithEmoticons(RtbText);
RtbFlowDocument.Blocks.Clear();
RtbFlowDocument.Blocks.Add(paragraph);
}我试着只检查RtbText的最后三个字符,但是如果用户输入属性RtbText还在改变。
有什么建议吗?在用户打字时,如何用微笑代替文本?
发布于 2011-01-20 17:46:10
我以前实现过这样的类(关闭源代码,尽管否则我会共享)。棘手的部分是当用户点击后退空间时管理插入符号的位置,因为您需要将Smiley转换回:-,同时处理边缘情况(段落的开头/结尾、文档等)。
发布于 2011-01-07 16:12:21
如果你得到了卡雷特的位置,当文本发生变化时,你可以在卡雷特周围寻找字符(前3和下3)。
https://stackoverflow.com/questions/4626831
复制相似问题