J'ai un contrôle utilisateur qui a un au chargement de la commande, je vais à une source externe, téléchargez un fichier texte et ajoutez < Code> TextBlock code> S à la toile. Ensuite, je souhaite créer un effet de défilement de chapiteur qui devrait fonctionner simplement bien, sauf après avoir ajouté le texte code> S sur la toile code> code>, j'ai besoin d'obtenir leur largeur à des fins de calcul mais La propriété Voici un code: p> canvas code> de hauteur 100 et de largeur 1920.
réelWidth code> est toujours zéro. p>
4 Réponses :
Tout Dans votre cas, je vous recommande d'utiliser Contrôle code> 'S
actuelHeight code> ou
réelWidth code> sera toujours zéro avant de ne pas être
chargé code >> code >> Mesurée code>>
arrangé code>>
rendu code>. P>
chargé code> ou
SIZCHANGED code> de ce
textblock code> à votre avantage. p>
Il y a beaucoup de textes de texte cependant, je devrais vous abonner à l'événement chargé de la dernière fois ajouté, ce qui semble être un peu de hack, ne pensez-vous pas?
Je suppose que tu as raison! Sauf si vous ajoutez ces textblock code> dans un
stackpanel code> avec
horizontal code> orientation et faites défiler ce panneau. Dans ce cas, vous devriez faire face à cet événement code> SEUL code> uniquement.
Un contrôle est rendu d'abord avant que son événement chargé soit appelé.
Y a-t-il une raison particulière pour utiliser Canvas code> pour la mise en page du texte
textblock code> s? Sinon, vous feriez mieux d'utiliser un
StackPanel code> avec une orientation horizontale, il gérera la mise en page Math pour vous. p>
Je fais un effet de chapiteau défilant, ce qui signifie que chaque élément doit vraiment être individuel et positionné absolument sur la toile
Si vous souhaitez coller avec votre appel à votre répartiteur, définissez la priorité à charger, elle sera appelée à la même heure que l'événement chargé et vous devez avoir une valeur. Il y a une surcharge sur Begininvoke qui prend une priorité aussi. P>
Vous pouvez toujours attacher un delgate au PropertymetatData / Onvaluechanged CODE> et lorsque
ActuelleHeight / ActualWidth Code> Modifie de 0 à quelque chose, ajustez votre défilement,
réelWidth / actuelHeight aura une valeur une fois sa rendu au moins une fois:
LocalNewsControl()
{
var descriptor = DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(TextBlock));
if (descriptor != null)
descriptor.AddValueChanged(myTextBlock, ActualWidth_ValueChanged);
}
private void ActualWidth_ValueChanged(object a_sender, EventArgs a_e)
{
//Modify you scroll things here
...
}
TEXTBLOCK n'est pas visible et n'est pas chargé, il n'a donc pas de propriétaire réelWidth. J'ai résolu un problème similaire avec les articlesControl, mais je ne suis pas sûr de la toile. Essayez des événements comme layoueuvre, sizechanged et ainsi de suite.