首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用户键入时使用Smiles将文本转换为文本

在用户键入时使用Smiles将文本转换为文本
EN

Stack Overflow用户
提问于 2011-01-07 15:03:58
回答 2查看 672关注 0票数 0

我试着解决这个问题。我已经为文本和文档属性绑定了richTextBox,此控件来自扩展WPF工具包中的richTextBox。

我的场景是:用户正在向richTextBox输入一些文本,如果他写了文本表情符号,我希望将这个文本表情符号转换为图像表情符号,并在richTextBox中显示他。

例如: Hello :) -> Hello IMAGE_SMILE

我有自己的类,它将带有表情的字符串转换为带有文本和图像的段落类型。

以下是:

代码语言:javascript
复制
public Paragraph ConvertToMessageWithEmoticons(string rpText){...}

在WPF应用程序中,我在richTextBox控件的文本和文档属性上绑定属性。

代码语言:javascript
复制
    //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上设置了观察者

代码语言:javascript
复制
        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);

我的问题是,如何优雅地用微笑代替文字,用表情符号代替文字。我试试看:

代码语言:javascript
复制
   private void AddSmiles(string text)
   {
        Paragraph paragraph = _smileConverter.ConvertToMessageWithEmoticons(RtbText);

        RtbFlowDocument.Blocks.Clear();

        RtbFlowDocument.Blocks.Add(paragraph);
   }

我试着只检查RtbText的最后三个字符,但是如果用户输入属性RtbText还在改变。

有什么建议吗?在用户打字时,如何用微笑代替文本?

EN

回答 2

Stack Overflow用户

发布于 2011-01-20 17:46:10

我以前实现过这样的类(关闭源代码,尽管否则我会共享)。棘手的部分是当用户点击后退空间时管理插入符号的位置,因为您需要将Smiley转换回:-,同时处理边缘情况(段落的开头/结尾、文档等)。

票数 1
EN

Stack Overflow用户

发布于 2011-01-07 16:12:21

如果你得到了卡雷特的位置,当文本发生变化时,你可以在卡雷特周围寻找字符(前3和下3)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4626831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档