2017-06-30 4 views
0

J'ai un contrôle WPF RichTextBox et je règle la valeur de la propriété RichTextBox.Document.PageWidth sur double.NaN afin que la valeur soit déterminée automatiquement.Récupère automatiquement la valeur de la propriété FlowDocument.PageWidth

Maintenant, je voudrais obtenir la valeur déterminée automatiquement, mais je ne peux pas le faire en lisant la valeur de la propriété, car elle renvoie double.NaN.

EDIT

j'essayer d'obtenir la valeur de RichTextBox.DesiredSize dans la méthode OnMyPropertyChanged de la propriété qui peut être réglé sur auto (avec une valeur de double.NaN):

if (!double.IsNaN(MyProperty)) richTextBox.Width = MyProperty; 
else richTextBox.Width = richTextBox.DesiredWidth; 

Cependant, DesiredSize retours 0 sur les deux axes.

Répondre

1

Créer un contrôle TextBlock (sans nécessairement ajouter à tout contrôle parent), définissez la valeur de texte que vous avez besoin pour obtenir la largeur, ainsi que les propriétés de police (FontFamily, FontStyle, FontWeight, FontStretch et FontSize), puis appelez la méthode Measure sur le contrôle, de sorte qu'il détermine la valeur de sa propriété DesiredSize, que vous pouvez lire ensuite.

1

C'est par conception ... RichTextBox devait exister dans une vue à largeur fixe. Une solution de contournement qui devrait fonctionner - placez-la dans une bordure et liez la largeur de la zone de texte enrichi à la valeur ActualWidth de la bordure.

Cheers.

+0

Pas mauvaise idée, mais si j'ai défini une propriété Width sur auto, la largeur est ajustée de sorte que la limite droite du contrôle soit à la limite de son contrôle conteneur. Ainsi, aucune propriété Width-like ne modifie sa valeur en fonction de la largeur du texte dans une zone de texte enrichi. Il le fait dans une zone de texte normale ou un bloc de texte, mais pas dans une zone de texte enrichie. De toute façon, j'ai trouvé une solution grossière mais ça marche bien, je l'ai posté comme une réponse. – florien