Je me demande si there un moyen facile d'obtenir la largeur d'un contrôle de WPF au moment de l'exécution alors que le contrôle est effondré. p>
Quand j'utilise Control.Width, je vais obtenir le résultat suivant: -1. # ind et contrôle.actualWidth reviendra 0,0 parce que son effondré. P>
Je veux redimensionner ma fenêtre puis afficher la commande effondrée. P>
merci p>
EDIT:
Quelques détails p>
J'ai une grille avec 2 colonnes dans ma fenêtre, la 1ère colonne contient une commande de tabulation, la 2ème colonne contient un contrôle d'extension. Je souhaite étendre la largeur de ma fenêtre lors de l'expansion du contrôle de l'extension, le contenu de la 1ère colonne restera sa taille. strong> p>
6 Réponses :
Quelle taille vous attendez-vous à obtenir? p>
La taille ne dépend pas du contrôle, mais également de son conteneur. La taille réelle ne peut donc pas être déterminée que si le contrôle est effectivement rendu. p>
Au lieu d'utiliser effondré, vous pouvez le rendre invisible de cette façon, il sera dimensionné par sa propre logique et la logique du conteneur. P>
Dans les commentaires, il est devenu évident que la raison pour laquelle la raison devait avoir besoin de la taille du contrôle: p>
J'ai une grille avec 2 colonnes dans mon
fenêtre, la 1ère colonne contient un onglet
Contrôle, la 2e colonne A tient un
Contrôle d'expandre. Je veux prolonger le
largeur de ma fenêtre lors de l'expansion du
contrôle d'expander, donc le contenu de
La 1ère colonne restera sa taille. P>
blockQuote>
Ma réponse: p>
Définissez le sizétocontent de la fenêtre sur WidthandHeight et définissez la largeur des deux colonnes de grille sur Auto. Cela devrait s'en occuper. P>
Lorsque vous cachez le contrôle, il réservera son espace dans la mise en page. c'est pourquoi je l'effondre.
Je ne sais pas :( Je pensais qu'il pourrait y avoir un moyen d'obtenir la taille estimée. Donc, je suppose que je ne peux utiliser que des solutions de contournement comme afficher la commande une fois et enregistrer la taille dans une variable ou avoir la commande expansée / visible par défaut.
Même lorsque vous appelez la méthode getDesiredsize msdn.microsoft.com/en-us/library /ee433806.aspx plusieurs fois, il ne sera pas en mesure de dire la taille exacte car le parent détermine la taille réelle. Vous pouvez rapidement le montrer et le cacher à nouveau. BTW: Qu'est-ce que tu essayes de faire? Peut-être que vous approchez-vous du mauvais angle.
J'ai une grille avec 2 colonnes dans ma fenêtre, la 1ère colonne contient une commande de tabulation, la 2ème colonne A contient un contrôle d'extension. Je souhaite étendre la largeur de ma fenêtre lors de l'expansion du contrôle de l'extension, le contenu de la 1ère colonne restera sa taille.
Définissez le sizétocontent de la fenêtre sur true et définissez la largeur des deux colonnes de grille sur Auto. Cela devrai prendre soin de ça.
Vous avez raison. Réglage du sizétocontent a fait l'affaire. aurait dû vous dire des gars ce que je tente de réaliser en premier lieu. Merci
Aucun problème. Je vais ajouter cette solution à ma réponse car la creuse dans les commentaires n'est pas très amusante pour les autres. Peut-être devriez-vous également ajouter la question actuelle à votre question.
Mettez le contrôle en question à l'intérieur d'un conteneur (comme un contentcontrol code>) et réduisez le conteneur plutôt que le contrôle lui-même. Ensuite, vous devriez être capable d'appeler simplement
mesurer code> (ou utilisez la propriété
désiré code>) sur le contrôle pour déterminer la quantité de pièce qu'il veut. P>
Je crois que vous allez à ce sujet le mauvais sens. Vous pouvez définir la largeur de la fenêtre et la hauteur sur Le problème se pose chaque fois que vous définissez directement la propriété de largeur de tout contrôle (croyez-moi que je l'ai fait). Une fois que vous faites cela, vous avez dit à WPF Si vous pensez que quelque chose ne redimensionne pas au bon moment, vous pouvez ajouter un gestionnaire à un événement, puis appelez "auto" code>, puis il prendra soin de toutes les trucs de redimensionnement. P>
contrôle.invalidateVisual () code>
ou contrôle.invalidateMesure () code>
qui le fera passer par une nouvelle passe de mise en page. P>
Pour définir la hauteur et la largeur d'une fenêtre sur Auto: Définissez le sizétocontent de la fenêtre sur true
@Erno bon point, vous devez non seulement définir la largeur et la hauteur sur "auto" code> mais aussi
sizétocontent = "widthandheight" code>
Vous devez appeler la méthode UpdateLayout code> sur le contrôle ou le conteneur de contrôle. Après cela, les choses peuvent fonctionner correctement. P>
Dans UWP, vous pouvez déterminer la taille de la commande effondrée en le rendant visible pour une seconde, puis la masquant à nouveau, le changement n'est pas perceptible:
var oldVisibility = myBorder.Visibility; myBorder.Visibility = Visibility.Visible; myBorder.UpdateLayout(); var height = myBorder.RenderSize.Height; myBorder.Visibility = oldVisibility;
POST qui est marqué comme une réponse ne répond pas à la question, cela donne simplement une solution de contournement. P>
Pour obtenir la taille du contrôle effondré dont vous avez besoin: p>
Pourquoi doit-il être fait de cette façon? Vous ne pouvez pas simplement afficher le contrôle puis le redimensionner?
Je ne connais pas vraiment WPF, mais pouvez-vous définir la visibilité sur FALSE puis développer et prendre la largeur / la hauteur?
@Simonbesner Je pensais faire de cette façon, mais pour moi, c'est plus une solution de contournement et non le «droit»;) et cette approche a une inconvénient: disons que j'ai un contrôle d'expandeur et sur l'événement élargi, affichez malade de la grille et redimensionner la fenêtre directement après cela. Le Windowsize ne changera pas la première fois que je fais cela. Je ne sais pas pourquoi c'est comme ça, mais je l'ai testé.
Désolé d'avoir causé la confusion que le sizétocontent doit être réglé sur Widthandheight.