Visible en ligne de compte d'un TextBlock
Si vous définissez TextWrapping à "Envelopper", WPF TextBlock peut avoir plusieurs lignes de texte.
Est-il une manière "propre" pour obtenir le nombre de lignes de texte? J'ai pensé à la hauteur souhaitée et en le divisant par une estimation de la hauteur de chaque ligne. Cependant, ce qui semble très sale. Est-il un meilleur moyen?
OriginalL'auteur tom7 | 2009-07-09
Vous devez vous connecter pour publier un commentaire.
Une chose à propos de WPF, c'est très agréable, c'est que tous les contrôles sont très lookless. De ce fait, nous pouvons faire usage de Zone de texte, qui a un LineCount propriété (Pourquoi ce n'est pas une DependencyProperty ou pourquoi TextBlock ne pas le faire, je ne sais pas). Avec la zone de texte, nous pouvons tout simplement ré-modèle de sorte qu'il se comporte et ressemble plus à un TextBlock. Dans notre Style personnalisé/Modèle, nous allons définir IsEnabled à Faux, et il suffit de créer une base de la re-création de modèles de contrôle, de sorte que les personnes handicapées look n'est plus présent. On peut aussi lier les propriétés que nous voulons conserver, comme arrière-plan, grâce à l'utilisation de TemplateBindings.
Maintenant, qui va prendre soin de notre zone de texte rechercher et de se comporter comme un TextBlock, mais comment pouvons-nous obtenir le nombre de lignes?
Bien, si nous voulons accéder directement dans le code-behind, alors nous pouvons nous inscrire dans la zone de texte du SizeChanged Événement.
Cependant, comme j'ai tendance à avoir besoin d'utiliser les propriétés comme ça dans des endroits autres que la fenêtre en cours, et/ou que je suis en utilisant MVVM et ne veulent pas prendre cette approche, nous pouvons créer des AttachedProperties pour gérer la récupération et le réglage de la LineCount. Nous allons utiliser la AttachedProperties de faire la même chose, mais maintenant, nous allons être en mesure de l'utiliser avec n'importe quel zone de texte n'importe où, et se lier à elle à travers cette zone de texte au lieu de la Fenêtre du DataContext.
Maintenant, il est facile de trouver les LineCount:
OriginalL'auteur rmoore
OriginalL'auteur mark carew
J'ai vu que cette question est déjà 7 ans, mais je suis juste venu avec une solution:
TextBlock ont une propriété privée appelée LineCount. J'ai créé une méthode d'extension de lire cette valeur:
OriginalL'auteur jannagy02
La manière la plus simple est la LineCount de la propriété. Vous avez également une méthode appelée GetLastVisibleLineIndex qui vous permettent de savoir combien de lignes de la zone de texte peut afficher (sans barres de défilement).
Si vous souhaitez savoir quand une ligne est ajoutée que vous pouvez entendre à l'événement TextChanged et poser des questions sur la LineCount propriété (vous aurez besoin de garder le las LineCount dans une variable pour faire la comparaison).
J'ai trouvé très utile tho. de bonnes infos, de mauvaise réponse.
OriginalL'auteur Guido Zanon