2009-07-16 11 views
5

Mam ten fragment kodu XAML:WPF sterowania rzeczywisty rozmiar

<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> 

W kodzie za próbuję uzyskać etykietę za rzeczywistą szerokość, myślałem

theLabel.ActualWidth 

zrobi to sztuczka, ale po wykonaniu tego kodu:

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

wartość szerokości wynosi 0, ja również sprawdzane theLabel.Width, która zwraca NaN, theLabel.Desir edSize.Width, który również zwraca 0. Co mogę użyć, aby znaleźć rzeczywistą szerokość etykiety?

Dziękuję.

+3

Czy to możliwe, że kontrola nie ma ActualWidth, ponieważ nadal jesteś w konstruktorze? System Windows nie został jeszcze wyrenderowany. Co się stanie, jeśli przeniesiesz ten kod do, powiedzmy, załadowanej obsługi zdarzeń? –

+0

Ha! Tak było. Zawsze myślałem, że po InitializeComponent() wszystko powinno już być renderowane ... dzięki! – Carlo

Odpowiedz

12

ActualWidth nie zostanie ustawiony, dopóki rodzice składnika (i ewentualne dzieci) nie zostaną ułożeni.

Aby uzyskać komponent o numerze ActualWidth, należy poczekać na ukończenie przekazywania układu. Posłuchaj zdarzenia Loaded, ponieważ nie jest ono wywoływane, dopóki nie przejdzie pierwszego przejścia układu.

+1

po szukaniu rozwiązania przez 45 minut, ten w końcu działa>.> Dzięki! (2 lata później: P) – Toadums

+0

Dzięki, szaleją nad tym :) – robertk

Powiązane problemy