我正在开发一个简单的聊天应用程序。目前,消息绑定到自定义样式的列表框,如下所示(简化的 XAML):

<ListBox ItemsSource="{Binding MessageCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

现在我希望能够将图像(如图形笑脸)放入显示的消息文本中。有没有办法使用 TextBlock (或任何其他标准组件)来实现此目的,或者我是否需要为此使用一些特殊的控件?

提前致谢

有帮助吗?

解决方案

如果你真的想要图像 里面 文本(如表情符号),那么您将需要做一些工作。这听起来像是我真正想要一个用户控件的少数情况之一,其要点是扫描文本以查找表情符号值并动态构建数据模板。

请记住,您可以在 XAML 中执行的任何操作都可以在代码中执行,因此我正在考虑的代码将遵循以下总体思路:

  1. 扫描文本中的表情符号值和 为数据创建值列表 元素。
  2. 创建一个 DockPanel。
  3. Foreach 元素,添加 TextBlock 或 Image (基于值)。
  4. 将 this.Content 设置为 DockPanel。

我认为这样的东西实际上就是您正在寻找的东西,但如果您只想要一个图像,那么 ValueConverter 建议会起作用。

其他提示

只需使用InlineUIContainer。

<TextBlock TextWrapping="Wrap">
    <Run>Some text.</Run>
    <InlineUIContainer>
        <Image Source="http://sstatic.net/stackoverflow/img/apple-touch-icon.png" Height="20"></Image>
    </InlineUIContainer>
    <Run>Some more text.</Run>
</TextBlock>

TextBlock的内容是永远只是一个系列内联的,所以你应该使用InlineUIContainer。您可以插入此容器,不管你想要的形象出现在你的TextBlock的内联的一个,交替使用文本运行。你可以解析的消息,并在同一时间继续增加,你觉得到TextBlock的内联集的令牌(文本或图像)。

您可以使用一个值转换器,用于将文本转换为另一种类型的,其具有由文字或笑脸(在它们出现的顺序)的段的列表。

然后,可以使用一个数据模板绑定到新类型,并显示文本和笑脸适当。

我最近也遇到了这个问题,并通过我

克服这个

创建列表框的ItemTemplate包含一个具有在一个ItemsPanelTemplate WrapPanel一个ItemsControl然后我的字符串结合的ItemsControl的的ItemsSource与容纳所有的逻辑一的IValueConverter。

拆出你的话,查询/搜索你的表情符号的字符串,超链接等,并创建你的TextBlock,图片,超链接,按钮元素,并设置你的价值观和事件句柄。

在该函数创建一个列表<的UIElement>和填充已生成的控制列表并返回列表作为的IValueConverter的转换函数的对象。

由于你有WrapPanel在那里你得到你的包装完成。

使用Image元素代替的TextBlock并使用转换器来映射的文本值到微笑的图像。

<ListBox ItemsSource="{Binding MessageCollection}">
<ListBox.ItemTemplate>
    <DataTemplate>
        <Image Source="{Binding Text, Converter={StaticResource MyImageConverter}}"/>
    </DataTemplate>
</ListBox.ItemTemplate>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top