XAML Element .net的宽度和高度MAUI总是NaN

4dbbbstv  于 2023-09-28  发布在  .NET
关注(0)|答案(2)|浏览(175)

我在获取maui中元素的实际宽度和高度时遇到了问题。在WPF中,我有ActualWidth和ActualHeight,它们给予了元素加载后呈现的大小。但在毛伊岛总是NaN。我有一个简单的网格:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="35*"/>
            <RowDefinition Height="30*"/>
            <RowDefinition Height="35*"/>
        </Grid.RowDefinitions>
        <Border Grid.Row="0" VerticalOptions="Fill" HorizontalOptions="Fill"/>

        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="20*"/>
                <ColumnDefinition Width="60*"/>
                <ColumnDefinition Width="20*"/>
            </Grid.ColumnDefinitions>

            <Border Grid.Column="0" VerticalOptions="Fill" HorizontalOptions="Fill"/>
            <Border x:Name="CenterBorder" Grid.Column="1" VerticalOptions="Fill" HorizontalOptions="Fill"/>
            <Border Grid.Column="2" VerticalOptions="Fill" HorizontalOptions="Fill" />
        </Grid>

        <Border Grid.Row="2" VerticalOptions="Fill" HorizontalOptions="Fill"/>
</Grid>

现在,我只想得到“CenterBorder”的渲染宽度和高度。但价值观从未被设定。我认为这与布局是完全动态的有关,但我不想使用固定的大小。

uttx8gqw

uttx8gqw1#

这是因为您尝试在应用程序布局视图之前获取其高度和宽度。您可以尝试在页面的LayoutChildren方法中获取它。

protected override void LayoutChildren(double x, double y, double width, double height)
    {
        base.LayoutChildren(x, y, width, height);
        var width = CenterBorder.Width;
        var height = CenterBorder.Height;
    }
vlf7wbxs

vlf7wbxs2#

你需要从它的基类中读取宽度; ViewViewElemement

(CenterBorder as View).Width

确保页面首先完全呈现。

更新

经过进一步的调查,我发现这是关于渲染的。当页面被完全呈现时,宽度就在那里。

相关问题