我想要與內嵌圖像聊天。 richtextbox好,因爲我可以在其中放置圖像,但我想單獨發送文本/圖像。 -first:發送文本(並在文本中放置圖像佔位符)。 -second:發送圖像並用佔位符替換它。C#/ WPF:Richtextbox:查找所有圖像
爲此,我需要刪除richtextbox中的所有圖像(並將它們分開發送)。 但我怎麼找到圖像?
而順便說一句:有可能根據richtextbox的寬度重新縮放圖像嗎?
謝謝:)
我想要與內嵌圖像聊天。 richtextbox好,因爲我可以在其中放置圖像,但我想單獨發送文本/圖像。 -first:發送文本(並在文本中放置圖像佔位符)。 -second:發送圖像並用佔位符替換它。C#/ WPF:Richtextbox:查找所有圖像
爲此,我需要刪除richtextbox中的所有圖像(並將它們分開發送)。 但我怎麼找到圖像?
而順便說一句:有可能根據richtextbox的寬度重新縮放圖像嗎?
謝謝:)
要找到一個RichTextBox所有圖像,需要通過所有段落和內聯遍歷;然後你可以用圖像做任何你需要的東西。例如,下面的代碼將增加RichTextBox內所有圖像的大小(1個像素)。
public static void ResizeRtbImages(RichTextBox rtb)
{
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;
image.Width = image.ActualWidth + 1;
image.Height = image.ActualHeight + 1;
}
}
}
}
}
}
添加到Prabu的Arumugam的回答,Block
也可以是BlockUIContainer
與Image
,所以你需要:
else if (block is BlockUIContainer)
{
var container = (BlockUIContainer)block;
if (container.Child is Image)
{
Image image = (Image)container.Child;
// ...
}
}
我也寧願Linq的語法結構緊湊,也許是這樣的:
public static void ResizeRtbImages(RichTextBox rtb)
{
IEnumerable<Image> images = rtb.Document.Blocks.OfType<BlockUIContainer>()
.Select(c => c.Child).OfType<Image>()
.Union(rtb.Documents.Blocks.OfType<Paragraph>()
.SelectMany(pg => pg.Inlines.OfType<InlineUIContainer>())
.Select(inline => inline.Child).OfType<Image>()
);
foreach (var image in images)
{
// resize
}
}
謝謝,cincoutprabu – user437899 2010-12-11 16:08:55