Как скрыть абзац в FlowDocument?

Можно ли использовать привязку данных для отображения или скрытия абзаца в FlowDocument? (Я хочу использовать MVVM, но с FlowDocument как мое представление.)

Параграф не имеет свойства Видимость. Я не уверен, что еще искать.

Ответ 1

У меня была одна и та же проблема и успешно обработано, обертывая содержимое ListItem в InlineUIContainer, например:

  <ListItem>
    <Paragraph>
      <InlineUIContainer>
        <TextBlock x:Name="HideMe" Visibility="Collapsed">
          <Hyperlink NavigateUri="...">Components</Hyperlink>
        </TextBlock>
      </InlineUIContainer>
    </Paragraph>
  </ListItem>

Отсюда вы можете установить вязкость "HideMe" в коде или через привязку.

Ответ 2

Я попробовал ответить Крису Бове, но у него было несколько проблем:

  • Выбор текста не работает правильно
  • Текст внутри не течет как абзац

Моим решением было добавить и удалить абзац из документа потока.

Шаги:

  • Назовите документ потока (т.е. flowDocument)
  • Назовите элемент перед абзацем, который вы хотите скрыть (т.е. previousBlock)
  • Назовите абзац, который вы хотите скрыть (т.е. hideParagraph)

Тогда:

        if (<hide paragraph>)
        {
            if (previousBlock.NextBlock == hideParagraph)
            {
                flowDocument.Blocks.Remove(hideParagraph);
            }
        }
        else
        {
            if (previousBlock.NextBlock != hideParagraph)
            {
                flowDocument.Blocks.InsertAfter(previousBlock, hideParagraph);
            }
        }

Ответ 3

Параметры, о которых я могу думать...

  • Скрыть содержимое абзаца (не включать абзац в вашей модели)
  • Расширить абзац (или один из его базовых классов) и предоставить свойство зависимостей для IsVisible