2009-08-10 9 views
10

Existe-t-il un moyen d'utiliser la liaison de données pour afficher ou masquer un paragraphe dans un FlowDocument? (Je souhaite utiliser MVVM, mais avec un FlowDocument comme vue.)Comment cacher un paragraphe dans un FlowDocument?

Le paragraphe n'a pas de propriété Visibility. Je ne suis pas sûr de quoi d'autre chercher.

Répondre

0

Options Je peux penser ...

  1. Masquer le contenu du paragraphe (ne pas inclure le paragraphe dans votre modèle)
  2. Étendre le paragraphe (ou l'une de ses classes de base) et de fournir une propriété de dépendance pour IsVisible
+2

Si le paragraphe n'a pas de contenu, alors il occupe encore une ligne complète d'espace vertical, que je préfère éviter. En ce qui concerne l'ajout d'une propriété IsVisible, comment serait-elle implémentée? –

2

J'ai eu exactement le même problème et a traité avec succès en enveloppant le contenu du ListItem dans un InlineUIContainer, comme ceci:

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

De là, vous pouvez définir la visibilité de "HideMe" dans le code ou via une liaison.

2

J'ai essayé la réponse de Chris Bova, mais il y avait un problème de couple:

  1. Sélection de texte ne fonctionne pas droit
  2. Le texte à l'intérieur ne coule pas comme un paragraphe

Mon solution consistait à ajouter et supprimer le paragraphe du document de flux.

Les étapes sont les suivantes:

  1. Nom du document de flux (c.-à-FlowDocument)
  2. nom à l'élément avant le paragraphe que vous voulez cacher (c.-à-previousBlock)
  3. Nom du paragraphe que vous voulez cacher (à savoir hideParagraph)

Puis:

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