我在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}}" />
这不起作用,我认为它只是替换了文本,我需要一种方法来传回图像,任何建议我怎么能这样做?
答案 0 :(得分:1)
首先,您需要将属性从Text
(只是一个字符串)切换到InlineCollection
,这正是您所寻找的。 p>
然后,在转换器中,您应该根据收到的字符串返回该集合,
Run
类。Image
类,或者包含在UIContainer
左右,我现在还记不起该类的正确名称。 :)