WPF控件实际大小

6

我有这段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;
}

宽度的值为0,我也通过theLabel.Width进行了检查,返回NaN,theLabel.DesiredSize.Width也返回0。我该使用什么方法来找到标签的真实宽度?

谢谢。


3
控件没有实际宽度,可能是因为您仍在构造函数中。窗口尚未实际呈现。如果将该代码移动到“Loaded”事件处理程序中,会怎样? - Matt Hamilton
哈!成功了。我一直以为在InitializeComponent()之后所有的东西都应该已经被渲染了...谢谢! - Carlo
1个回答

13

ActualWidth直到组件的父元素(以及可能的子元素)布局完成后才设置。

为了获取组件的ActualWidth,您需要等待布局过程完成。请监听Loaded事件,因为该事件只会在第一次布局之后调用。


1
在寻找解决方案45分钟后,这个终于有效了 >.> 谢谢!(两年后 :P) - Toadums
谢谢,我们为此疯狂了 :) - robertk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接