WPF C#在特定位置(代码)的文本块中插入图像

时间:2013-11-26 17:26:32

标签: c# wpf textblock

我想在执行期间在特定位置的Textblock中添加图像。我正在聊天游戏,这些图像将是表情符号。我想制作一个方法,将图像放在句子的末尾,但是我所做的那个方法效果不好,因为表情符号总是出现在句子的末尾。

聊天应该如下所示:

玩家1:嗨*(图片)

玩家2:我不想和你说话* 2(Image2)

但是我的聊天看起来像这样:

玩家1:嗨*

玩家:我不想和你说话* 2(图片)(图片2)

代码:

        foreach(char CharOfTheEmoticon in MiChatBox.Text)
        {

            if (CharOfTheEmoticon.Equals('*'))
            {
            BitmapImage MyImageSource = new BitmapImage(new Uri(@"..\..\..\..\Tarea6\Tarea3Frontend\NewImages\Smile.png", UriKind.Relative));
            Image image = new Image();
            image.Source = MyImageSource;
            image.Width = 15;
            image.Height = 15;
            image.Visibility = Visibility.Visible;
            InlineUIContainer container = new InlineUIContainer(image);
            Run run = new Run();
            run.Text = "*";
            MiChatBox.Inlines.Add(container);
            MiChatBox.Inlines.Add(run);
            }

         //More if for a differents images
        }

图像的位置由特定字符表示(例如* o * 2)  我想使用普通的TextBlock而不是RichTextBlock  我认为这可以使用普通的TextBlock,因为它可以在xaml中完成。  感谢您的关注,希望您可以帮助我。

1 个答案:

答案 0 :(得分:4)

“MiChatBox.Inlines.Add”它在最后添加。 你应该这样做:

 var strBuild = new StringBuilder();
 var input = MiChatBox.Text;
 MiChatBox.Text = "";

 foreach (char CharOfTheEmoticon in input)
 {
     strBuild.Append(CharOfTheEmoticon);

     if (CharOfTheEmoticon == '*')
     {

         BitmapImage MyImageSource = new BitmapImage(new Uri(@"..\..\..\..\Tarea6\Tarea3Frontend\NewImages\Smile.png", UriKind.Relative));
         Image image = new Image();

         image.Source = MyImageSource;
         image.Width = 15;
         image.Height = 15;
         image.Visibility = Visibility.Visible;
         InlineUIContainer container = new InlineUIContainer(image);

         var originLastrText = new Run(strBuild.ToString());
         MiChatBox.Inlines.Add(originLastrText);
         MiChatBox.Inlines.Add(container);

         strBuild.Clear();
     }
 }

 var textRem = new Run(strBuild.ToString());
 MiChatBox.Inlines.Add(textRem);