0

我正在 WPF 中编写一个聊天应用程序(使用 MVVM),当用户将消息提交到聊天流中时,我想用实际的笑脸图标替换任何笑脸表情,例如 :-) :-/ :-D 等。

我编写了一个转换器来对消息进行线性搜索并识别笑脸。我的问题是,一旦我确定了笑脸表情,如何将包含笑脸的文本块替换为实际图标?

如果您觉得有更好或更有效的方法来做到这一点,我很想知道......

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // The message passed in to the converter by calling XAML code
        var message = System.Convert.ToString(value);

        // Perform a linear search on the message 
        for (int i = 0; i < message.Length - 1; i++)
        {
            var c = message[i];

            // Look for the character ':'
            if (c == ':'
                // Ensure that it has 2 more characters after it
                && i + 2 <= message.Length - 1 &&
                // If it's the last character then that's fine
                ((i + 2 == message.Length - 1) ||
                // Or else it should be followed by an empty space
                (i + 3 <= message.Length - 1 && message[i + 3] == ' ')))
            {
                var expression = message.Substring(i, 3);

                message = message**.Replace(expression, @".\Emotions\1.png");**
            }
        }

        return message;
    }

从我的 XAML 调用转换器

<TextBlock Text="{Binding Content, Converter={converter:EmotionConverter}}" />

这不起作用,我认为它只是替换了文本,我需要一种方法来传回图像,有什么建议我该怎么做?

4

1 回答 1

1

首先,您需要将属性从Text(只是一个字符串)切换到InlineCollection您正在寻找的内容。

然后,在您的转换器中,您应该根据收到的字符串返回该集合,并且

  • 当您需要返回文本行时,您返回Run包含文本的类。
  • 当您需要返回图像时,您返回一个Image类本身或包装到该类中UIContainer,我现在不记得该类的正确名称。:)
于 2013-10-25T14:45:20.213 回答