Since I am pretty new to WPF FlowDocuments I would like to ask if the code below is correct. It is supposed to return all Images contained in a FlowDocument as List:
Little change in Code to add coverage for Figure and Floater
public static IEnumerable FindImages(FlowDocument document)
{
return document.Blocks.SelectMany(block => FindImages(block));
}
public static IEnumerable FindImages(Block block)
{
if (block is Paragraph)
{
List toReturn = new List();
var check = ((Paragraph)block).Inlines;
foreach (var i in check)
{
if (i is InlineUIContainer)
{
var inlineUiContainer = i as InlineUIContainer;
Image image = ((InlineUIContainer)inlineUiContainer).Child as Image;
if(image != null)
{
toReturn.Add(image);
}
}
else if (i is Figure)
{
var figure = i as Figure;
var images = figure.Blocks.SelectMany(blocks => FindImages(blocks));
toReturn.AddRange(images);
}
else if (i is Floater)
{
var floater = i as Floater;
var images = floater.Blocks.SelectMany(blocks => FindImages(blocks));
toReturn.AddRange(images);
}
}
return toReturn;
}
if (block is Table)
{
return ((Table)block).RowGroups
.SelectMany(x => x.Rows)
.SelectMany(x => x.Cells)
.SelectMany(x => x.Blocks)
.SelectMany(innerBlock => FindImages(innerBlock));
}
if (block is BlockUIContainer)
{
Image i = ((BlockUIContainer)block).Child as Image;
return i == null
? new List()
: new List(new[] { i });
}
if (block is List)
{
return ((List)block).ListItems.SelectMany(listItem => listItem
.Blocks
.SelectMany(innerBlock => FindImages(innerBlock)));
}
throw new InvalidOperationException("Unknown block type: " + block.GetType());
}