2009-07-16 9 views
5

J'ai ce morceau de code XAML:WPF contrôle taille réelle

<Window x:Class="SizingTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Label x:Name="theLabel" Width="Auto">A very large label with a lot of text</Label> 
    </Grid> 
</Window> 

Dans le code derrière, je suis en train d'obtenir la largeur réelle de l'étiquette, je pensais que

theLabel.ActualWidth 

ferait la truc, mais après avoir essayé ce code:

public Window1() 
{ 
    InitializeComponent(); 
    double width = theLabel.ActualWidth; 
} 

La valeur de la largeur est 0, j'ai vérifié aussi avec theLabel.Width, qui renvoie NaN, theLabel.Desir edSize.Width, qui retourne également 0. Que puis-je utiliser pour trouver la largeur réelle de l'étiquette?

Merci.

+3

Se pourrait-il que le contrôle n'a pas de largeur réelle parce que vous êtes toujours dans le constructeur? Windows n'a pas encore été rendu. Que faire si vous déplacez ce code vers, disons, le gestionnaire d'événements Loaded? –

+0

Ha! C'est ce qu'il a fait. J'ai toujours pensé qu'après InitializeComponent() tout aurait déjà dû être rendu ... merci! – Carlo

Répondre

12

ActualWidth n'est pas défini tant que les parents du composant (et les enfants possibles) ne sont pas configurés.

Pour obtenir le code ActualWidth d'un composant, vous devez attendre la fin d'un passage de mise en page. Écoutez l'événement Loaded, car il n'est pas appelé avant la première passe de mise en page.

+1

après avoir cherché une solution pendant 45 minutes, celui-ci fonctionne enfin>.> Merci! (2 ans plus tard: P) – Toadums

+0

Merci, étaient en train de devenir fou :) – robertk

Questions connexes