Как я могу скрыть абзац в FlowDocument? - PullRequest
12 голосов
/ 10 августа 2009

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

Абзац не имеет свойства видимости. Я не уверен, что еще искать.

Ответы [ 3 ]

3 голосов
/ 05 ноября 2009

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

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

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

2 голосов
/ 28 сентября 2013

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

  1. Выбор текста не сработал
  2. Текст внутри не был похож на абзац

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

Шаги:

  1. Назовите документ потока (т.е. flowDocument)
  2. Назовите элемент перед абзацем, который вы хотите скрыть (т. Е. Предыдущий блок)
  3. Назовите абзац, который вы хотите скрыть (т.е. hideParagraph)

Тогда:

        if (<hide paragraph>)
        {
            if (previousBlock.NextBlock == hideParagraph)
            {
                flowDocument.Blocks.Remove(hideParagraph);
            }
        }
        else
        {
            if (previousBlock.NextBlock != hideParagraph)
            {
                flowDocument.Blocks.InsertAfter(previousBlock, hideParagraph);
            }
        }
0 голосов
/ 10 августа 2009

Варианты, которые я могу придумать ...

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