Поскольку с тех пор, как я отправил это сообщение и не получил ответа, прошел месяц, я опубликую то, что в итоге сделал. Это довольно глупо, что я написал таким образом, но я не мог найти более чистый способ его реализации, в основном потому, что свойство Blocks не предоставляется через общий интерфейс.
public BlockCollection FindContainingCollection(Block block)
{
BlockCollection blocks = null;
FlowDocument flowDoc = block.Parent as FlowDocument;
if (flowDoc != null)
blocks = flowDoc.Blocks;
else
{
TableCell tableCell = block.Parent as TableCell;
if (tableCell != null)
blocks = tableCell.Blocks;
else
{
ListItem listItem = block.Parent as ListItem;
if (listItem != null)
blocks = listItem.Blocks;
else
{
Section section = block.Parent as Section;
if (section != null)
blocks = section.Blocks;
else
{
Figure figure = block.Parent as Figure;
if (figure != null)
blocks = figure.Blocks;
else
{
Floater floater = block.Parent as Floater;
if (floater != null)
blocks = floater.Blocks;
}
}
}
}
}
return blocks;
}