2010-09-06 5 views
2

J'ai besoin de montrer une énorme quantité de données textuelles dans le code WPF. D'abord, j'ai essayé d'utiliser TextBox (et bien sûr, il était trop lent dans le rendu). Maintenant j'utilise FlowDocument - et c'est génial - mais récemment j'ai eu une autre demande: le texte ne devrait pas être coupé. Apparemment ce n'est pas (document.IsHyphenationEnabled = false) mais je ne vois toujours pas ma précieuse barre de défilement horizontal. si je grossis le texte de l'échelle est ... trait d'union.La meilleure façon d'afficher du texte énorme dans WPF?

alt text

public string TextToShow 
{ 
    set 
    { 
     Paragraph paragraph = new Paragraph(); 
     paragraph.Inlines.Add(value); 

     FlowDocument document = new FlowDocument(paragraph); 
     document.IsHyphenationEnabled = false; 

     flowReader.Document = document; 
     flowReader.IsScrollViewEnabled = true; 
     flowReader.ViewingMode = FlowDocumentReaderViewingMode.Scroll; 
     flowReader.IsPrintEnabled = true; 
     flowReader.IsPageViewEnabled = false; 
     flowReader.IsTwoPageViewEnabled = false; 
    } 
} 

Voilà comment je crée FlowDocument - et vient ici une partie de mon contrôle WPF:

<FlowDocumentReader Name="flowReader" Margin="2 2 2 2" Grid.Row="0" /> 

Rien criminel =))

Je voudrais savoir comment apprivoiser cette bête - googlé rien d'utile. Ou vous avez une autre façon de montrer des mégaoctets de texte, ou des textbox ont des fonctionnalités de virtualisation que je dois juste activer. De toute façon, je serai heureux d'entendre votre réponse!

+2

Votre problème n'est pas une césure. C'est enveloppant. Jetez un oeil ici: http://msdn.itags.org/visual-studio/36912/, ils suggèrent de définir la largeur du paragraphe plus grande que la fenêtre de vue. – OmerGertel

+0

Merci Omer - lien et suggestion semble être très raisonnable. Will l'essayer bientôt :) – ProfyTroll

+0

voir la réponse ici: https://stackoverflow.com/questions/807347/how-do-i-handle-edit-large-amount-of-text-in-wpf/46546877#46546877 – juFo

Répondre

1

Ce n'est vraiment pas un trait d'union. Et on peut surmonter cela en définissant FlowDocument.PageWidth à une valeur raisonnable, la seule question était de savoir comment déterminer cette valeur. Omer a suggéré cette recette msdn.itags.org/visual-studio/36912/ mais je n'aime pas utiliser TextBlock comme un instrument de mesure pour le texte. Beaucoup mieux:

  Paragraph paragraph = new Paragraph(); 
      paragraph.Inlines.Add(value); 


      FormattedText text = new FormattedText(value, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(paragraph.FontFamily, paragraph.FontStyle, paragraph.FontWeight, paragraph.FontStretch), paragraph.FontSize, Brushes.Black); 

      FlowDocument document = new FlowDocument(paragraph); 
      document.PageWidth = text.Width*1.5; 
      document.IsHyphenationEnabled = false; 

Omer - merci pour la direction.

Questions connexes