WPF用笑脸图标替换笑脸

时间:2013-10-25 14:40:45

标签: wpf xaml mvvm

我在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}}" />

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

1 个答案:

答案 0 :(得分:1)

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

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

  • 如果需要返回文本行,则返回包含文本内容的Run类。
  • 当您需要返回一张图片时,您会自行返回一个Image类,或者包含在UIContainer左右,我现在还记不起该类的正确名称。 :)