2010-09-26 6 views
3

Salut J'essaie d'obtenir le rectangle de l'écran d'un bouton wpf afin que je puisse le mettre en évidence.comment obtenir wpf bouton écran rectangle

J'utilise ceci pour obtenir le même:

AutomationPeer theBtnPeer = createPeerForElement (BTN); Rect rect = theBtnPeer.GetBoundingScreenRectangle();

Cela fonctionne très bien et me donne le bon rectangle.

Cependant ... si le bouton n'est pas visible actuellement, j'appelle le BringIntoView() sur ce btn qui affiche ce bouton avec succès mais quand j'appelle le GetBoundingSCreenRectangle() dessus encore. il me donne la même vieille valeur qui était là avant que j'appelle BringIntoView(). Comment obtenir le nouveau rectangle de délimitation de ce bouton?

Comment obtenir le nouveau rectangle de délimitation de ce bouton?

Merci

+0

S'IL VOUS PLAÎT ajouter virgules dans vos phrases ... votre question est vraiment pénible à lire –

Répondre

1

Vous pouvez obtenir la hauteur et la largeur du rectangle à travers les propriétés actualHeight et ActualWidth.

Les coordonnées dans la fenêtre dépendent du type de la commande de mise en page que le bouton est dans

Si votre objectif est de hightlight, je suggère une autre voie:. Changer le modèle du bouton d'inclure un point fort rectangle, invisible par défaut, avec un déclencheur pour le rendre visible si certaines conditions sont remplies. Ou utilisant les états visuels, ont des états surlignés et non surlignés, avec une transition qui rend le rectangle en surbrillance visible.

+0

Merci pour la réponse. et désolé de la mauvaise mise en forme .. Il semble que je ne peux pas appuyer sur {ENTER} pour accéder à la nouvelle ligne. Son non seulement de souligner que je veux faire .. Je suis vraiment intéressé à obtenir les coordonnées à l'écran correct pour une autre fonctionnalité aussi. Ce qui me brouille est pourquoi le code, AutomationPeer theBtnPeer = createPeerForElement (BTN); theBtnPeer.GetBoundingRectangle(); ne donne pas le rectangle correct après le défilement. Merci. – Rahul

+0

En HTML, les retours chariot simples sont ignorés, mais un second fera l'affaire (j'ai édité la question). Avez-vous essayé récursivement d'obtenir le rectangle de délimitation de l'arbre visuel, en allant vers le haut?GetBoundingRectangle _may_ renvoie les coordonnées dans le parent, ce qui implique d'obtenir ses limites et ainsi de suite. – Timores

0

Si le problème est que les propriétés de position ne sont pas mises à jour, appelez le ScrollViewer.UpdateLayout() pour forcer le recalcul des propriétés liées à la mise en page.

Si le problème est que la méthode renvoie toujours la même valeur pour un contrôle donné, vous recherchez peut-être la méthode Visual.PointToScreen(). Cela vous donnera les coordonnées absolues par rapport à la partie supérieure gauche de l'écran. Appelez cela sur votre bouton, comme:

btn.PointToScreen(new Point(0, 0));

Qu'allez-vous faire avec le rectangle retourné? Positionnez-vous quelque chose qui se trouve dans le même conteneur que le bouton, ou une fenêtre contextuelle, ou quelque chose d'autre? Si vous pouviez développer votre exemple de code pour fournir la partie du code qui utilise le rectangle résultant, cela nous aiderait à déterminer quel est le problème.

Questions connexes