Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将图像嵌入RichTextBox?_C#_Wpf - Fatal编程技术网

C# 如何将图像嵌入RichTextBox?

C# 如何将图像嵌入RichTextBox?,c#,wpf,C#,Wpf,我正在寻找一种方法来嵌入图像到富文本框。我的rtf文件是可移植的,它包含图像和文本。i、 e.它可以从一台计算机移动到另一台计算机。因此,用户应该能够看到rtf文件(文本+图像)的内容,即使它在另一台机器上 现在我使用以下代码插入图像 public static void ApplyImage(RichTextBox RichTextBoxControl) { try { Microsoft.Win32.OpenFileDialog dlg = new Micro

我正在寻找一种方法来嵌入图像到富文本框。我的rtf文件是可移植的,它包含图像和文本。i、 e.它可以从一台计算机移动到另一台计算机。因此,用户应该能够看到rtf文件(文本+图像)的内容,即使它在另一台机器上

现在我使用以下代码插入图像

public static void ApplyImage(RichTextBox RichTextBoxControl)
{
    try
    {
        Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
        dlg.DefaultExt = ".png";
        dlg.Filter = "PNG Files (.png)|*.png|JPG Files (.jpg)|*.jpg|GIF Files (.gif)|*.gif";
        Nullable<bool> result = dlg.ShowDialog();
        if (result == true)
        {
            string fileName = dlg.FileName;
            if (File.Exists(fileName))
            {
                BitmapImage bi = new BitmapImage(new Uri(fileName));
                Image image = new Image();
                image.Source = bi;
                InlineUIContainer container = new InlineUIContainer(image);
                Paragraph paragraph = new Paragraph(container);
                RichTextBoxControl.Document.Blocks.Add(paragraph);
            }
        }
    }
    catch
    {
        throw;
    }
}
publicstaticvoidapplyimage(RichTextBox-RichTextBoxControl)
{
尝试
{
Microsoft.Win32.OpenFileDialog dlg=新的Microsoft.Win32.OpenFileDialog();
dlg.DefaultExt=“.png”;
dlg.Filter=“PNG文件(.PNG)|*.PNG | JPG文件(.JPG)|*.JPG | GIF文件(.GIF)|*.GIF”;
可为空的结果=dlg.ShowDialog();
如果(结果==真)
{
字符串文件名=dlg.fileName;
if(File.Exists(fileName))
{
BitmapImage bi=新的BitmapImage(新的Uri(文件名));
图像=新图像();
image.Source=bi;
InlineUIContainer容器=新的InlineUIContainer(图像);
段落=新段落(容器);
RichTextBoxControl.Document.Blocks.Add(段落);
}
}
}
抓住
{
投掷;
}
}
但是这个代码不适合我的目的。因为嵌入的映像可能不在其他计算机中。所以它不会起作用。要么我需要嵌入图像,要么将图像作为二进制文件存储在rtf文件中。我到处都找遍了,没找到运气


有人能帮我吗?

我找到了解决这个问题的办法。我不确定这是不是正确的方法,但这个解决方案仍然对我有效。希望它能帮助别人

解决方案是迭代flow文档中的所有图像标记,并将图像复制到可移植的存储库文件夹中。然后下次从该存储库文件夹加载图像,将图像显示回richtextbox

foreach (Block block in rtb.Blocks)
        {
            if (block is Paragraph)
            {
                Paragraph paragraph = (Paragraph)block;
                foreach (Inline inline in paragraph.Inlines)
                {
                    if (inline is InlineUIContainer)
                    {
                        InlineUIContainer uiContainer = (InlineUIContainer)inline;
                        if (uiContainer.Child is Image)
                        {
                            Image image = (Image)uiContainer.Child;
//Copy Image source to another repository folder and save the path.
                        }
                    }
                }
            }

吹毛求疵:抓/扔是多余的。谢谢你的信息。但我需要一个解决问题的办法。有什么帮助吗?好像没人知道怎么办。不可能吗?