EDIT:Comment déterminer la largeur du contenu ou de la taille d'un conteneur au contenu
Ok, il est un peu résolu, mais il se sent sale:
foreach (ContainerVisual cv in SurfaceNYTR.Helpers.VFTreeHelper.FindVisualChildren<ContainerVisual>(flowDocReader))
{
if (cv.Parent.DependencyObjectType.SystemType.FullName == "MS.Internal.PtsHost.PageVisual")
{
flowDocReader.Width = cv.DescendantBounds.Width;
}
}
J'ai regardé dans Snoop , et il semble que l'un des objets ContainerVisual stocke la largeur correcte dans sa propriété DescendantBounds. Sa mère est PageVisual (cette classe est interne, cependant, de sorte que la comparaison de chaînes avec SystemType.FullName ou GetType() ToString() a été utilisé qui aspire sans doute.)
Note: FindVisualChildren finds all children by type, source for it can be found here
Mon objectif est d'afficher tout le contenu d'un FlowDocument (c'est-à-dire, sans pagination) dans une disposition de colonnes. Il aurait une hauteur fixe, mais la largeur dépendrait du contenu du FlowDocument.
Mon problème est le suivant: FlowDocumentReader ne redimensionne pas automatiquement le contenu de FlowDocument. Comme vous voyez dans mon XAML ci-dessous, FlowDocumentReader.Width est de 5000 unités (juste un grand nombre qui peut accueillir la plupart des documents) - quand je le fais Auto, il se clipse juste à la largeur du ScrollViewer et pagine mes affaires!
Y a-t-il une bonne façon de résoudre ce problème?
J'ai aussi fait une capture d'écran de ce que cela ressemble maintenant, mais les rouleaux de ScrollViewer passé la fin du document dans la plupart des cas: http://i.stack.imgur.com/3FSRl.png
<ScrollViewer x:Name="scrollViewer"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Disabled"
>
<FlowDocumentReader x:Name="flowDocReader"
ClipToBounds="False"
Width="5000"
>
<FlowDocument x:Name="flowDoc"
Foreground="#FF404040"
ColumnRuleWidth="2"
ColumnGap="40"
ColumnRuleBrush="#FF404040"
IsHyphenationEnabled="True"
IsOptimalParagraphEnabled="True"
ColumnWidth="150">
<Paragraph>
Lorem ipsum dolor sit amet, ...etc...
</Paragraph>
<Paragraph>
Lorem ipsum dolor sit amet, ...etc...
</Paragraph>
<Paragraph>
Lorem ipsum dolor sit amet, ...etc...
</Paragraph>
</FlowDocument>
</FlowDocumentReader>
</ScrollViewer>
Merci beaucoup! J'ai essayé d'utiliser Measure, en suivant vos conseils, mais il ne signale pas la taille correcte. Après avoir creusé à travers l'arbre visuel, j'ai trouvé que l'un des éléments de ContainerVisual avait les bonnes limites (celui dont le parent est un MS.Internal.PtsHost.PageVisual.) La propriété DescendantBounds.Width est la bonne largeur de FlowDocument. se sentir un peu sale en l'utilisant - édité le message original avec l'extrait de code si vous voulez voir – ISVK