Как скрыть абзац в 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