Comment puis-je mesurer la taille d'un TextBlock dans WPF avant, il est rendu?
J'ai un WPF DataTemplate avec deux TextBlock contrôles (empilés) et puis certains autres éléments au-dessous. En raison de certains complexes de mise en page de code, j'ai besoin de connaître la hauteur des deux éléments TextBlock, de sorte que je peux en tirer un peu de fantaisie connecteur de lignes et d'autres contrôles, etc.
Si je sais que le texte qui va dans le TextBlocks, et je sais que la police, etc., est-il un moyen pour que je puisse calculer ou mesurer la hauteur de ces TextBlocks sans réellement rendu?
OriginalL'auteur Scott Whitlock | 2010-06-07
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il devrait être suffisante pour appeler à la
UIElement.Mesure(Taille)
méthode et par la suite de vérifier lesUIElement.DesiredSize
de la propriété. Pour plus d'informations, consultez la condition MSDN liens.TextOptions.FormattingMode
-- assurez-vous que la valeur de cette propriété sur l'objet que vous êtes en mesure correspond à la valeur sur l'objet que vous êtes rendu (si ils ne sont pas les mêmes).Juste eu le même problème et appeler juste
textblock.Measure(new Size());
n'est pas assez. J'ai eu à utilisertextblock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
pour obtenir un résultat pourtextblock.DesiredSize
Rappelez-vous, que
MinWidth
doivent être mis à 0, etMaxWidth
ensemble de PositiveInfinity avant de mesurer, sinon il sera plafonné par ces valeurs.OriginalL'auteur
L'appel à
UIElement.Measure(Size)
, prend comme paramètreSize
. Le deuxième appelUIElement.DesiredSize
renvoie ce queSize
vous passé dans leMeasure
méthode.Je pense que c'est le cas parce que
UIElement
(TextBlock
dans ce cas) n'est PAS un enfant de tout contrôle (encore) et doncDesiredSize
a aucune raison d'être quelque chose de différent.OriginalL'auteur
J'apprécie que c'est plutôt une vieille question, mais j'ai trouvé qu'en utilisant le code suivant
dsrdSize est retourné comme {47.05,15.96}.
Le truc semble être de faire la msrSize plus grand que prévu de la taille réelle. msrSize semble agir comme une limite pour la DesiredSize() résultat.
Par exemple, à l'aide de msrSize = nouvelle Taille(10, 10), les résultats dans un dsrdSize de {10,10} ici.
Espérons que cela aide quelqu'un.
OriginalL'auteur
OriginalL'auteur