WPF Control фактический размер - PullRequest
5 голосов
/ 16 июля 2009

У меня есть этот кусок кода XAML:

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

В коде я пытаюсь получить реальную ширину метки, я думал

theLabel.ActualWidth

сделает то же самое, но после попытки этого кода:

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

Значение width равно 0, я также проверил с помощью theLabel.Width, который возвращает NaN, theLabel.DesiredSize.Width, который также возвращает 0. Что я могу использовать, чтобы найти реальную ширину метки?

Спасибо.

1 Ответ

12 голосов
/ 16 июля 2009

ActualWidth не устанавливается до тех пор, пока не будут размечены родители (и возможные дочерние элементы).

Чтобы получить ActualWidth компонента, вам нужно подождать завершения макета. Прослушайте событие Loaded , так как оно не вызывается до окончания первого прохода макета.

...