在TextBlock(WPF)中显示图像

lac*_*cop 13 wpf chat textblock

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

<ListBox ItemsSource="{Binding MessageCollection}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

现在我希望能够将图像(如图形表情符号)放入显示的消息文本中.有没有办法使用TextBlock(或任何其他标准组件)来实现这一点,还是我需要使用一些特殊的控件?

提前致谢

小智 44

只需使用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>
Run Code Online (Sandbox Code Playgroud)


Joe*_*ran 1

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

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

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

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