2010-10-28 3 views
2

Каким будет easiet (и, возможно, быстрый) способ получить объект BlockCollection (пространство имен System.Windows.Documents), которое содержит заданный объект Block-type?Получение объекта BlockCollection, который содержит объект Block

Я не мог найти прямой способ сделать это, используя то, что доступно для класса Block.

public static BlockCollection FindContainingCollection(Block block) 
{ 
    // ???   
} 

ответ

1

Потому что прошло уже месяц с тех пор, как я опубликовал это и не получил ответа, я опубликую то, что я закончил. Это довольно глупо, что я написал этот путь, но я не мог понять, какой способ его реализовать, главным образом потому, что свойство 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; 
    } 
-1

В блоке есть имущество SiblingBlocks, которое делает то, что вам нужно.

BlockCollection containingCollection = block.SiblingBlocks 

https://msdn.microsoft.com/en-us/library/system.windows.documents.block.siblingblocks(v=vs.100).aspx

+0

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Lamorak

+0

Редактировали его, чтобы включить пример кода. Это просто свойство, поэтому метод в вопросе не должен существовать. – Doug

0

Использование ElementAt(int32)

for(int i = 0; i < blocks.Count; i++) { 
    Block block = blocks.ElementAt(i); 
    Console.WriteLine("{0}", block.GetType()); 
} 
Смежные вопросы