Finding all Images in a FlowDocument

后端 未结 4 1794
花落未央
花落未央 2020-12-19 17:34

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:

4条回答
  •  天命终不由人
    2020-12-19 18:32

    LINQ is just freaking magical:

    public IEnumerable FindImages(FlowDocument document)
    {
        return document.Blocks.SelectMany(FindImages);
    }
    
    public IEnumerable FindImages(Block block)
    {
        if (block is Table)
        {
            return ((Table)block).RowGroups
                .SelectMany(x => x.Rows)
                .SelectMany(x => x.Cells)
                .SelectMany(x => x.Blocks)
                .SelectMany(FindImages);
        }
        if (block is Paragraph)
        {
            return ((Paragraph) block).Inlines
                .OfType()
                .Where(x => x.Child is Image)
                .Select(x => x.Child as Image);
        }
        if (block is BlockUIContainer)
        {
            Image i = ((BlockUIContainer) block).Child as Image;
            return i == null
                        ? new List()
                        : new List(new[] {i});
        }
        throw new InvalidOperationException("Unknown block type: " + block.GetType());
    }
    

提交回复
热议问题