屏幕宽度返回负数

问题描述 投票:1回答:3

我想从我的页面获取网格宽度,所以我尝试了这个:

public MemeBuilder()
{
    InitializeComponent();

    ColumnWidth = (MainGrid.Width - (8 * 5)) / 7;
    ....

但是MainGrid.Width返回-1。

这里是网格的xaml:

<Grid x:Name="MainGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
        <RowDefinition Height="*" />
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    .....

我在做什么错?

c# xamarin xamarin.forms xamarin.android xamarin.ios
3个回答
0
投票

您可以订阅SizeChanged事件,然后从那里获取Width

private void MainGrid_SizeChanged(object sender, EventArgs e)
{
    var grid = (Grid)sender;
    var width = grid.Width;
}

0
投票

处理此问题的最佳方法是使用Xamarin.Essentials设备显示信息API

// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;

// Orientation (Landscape, Portrait, Square, Unknown)
var orientation = mainDisplayInfo.Orientation;

// Rotation (0, 90, 180, 270)
var rotation = mainDisplayInfo.Rotation;

// Width (in pixels)
var width = mainDisplayInfo.Width;

// Height (in pixels)
var height = mainDisplayInfo.Height;

// Screen density
var density = mainDisplayInfo.Density;

现在您可以通过将密度相除来获得宽度:

var width = DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density;

祝你好运

如果有问题请还原


-1
投票

我的错误,您使用的是xamarin形式。我认为您没有得到宽度,因为@Peter B所说的生命周期。无论是OnStart事件

protected override void OnStart()
{
      ColumnWidth = (MainGrid.width- (8 * 5)) / 7;
}

或如果网格在另一个页面中,则页面出现事件

protected async override void OnAppearing()
            {
            if(!isLoaded) 
                {
                //Do API Calls
                isLoaded=true;
                }
        }
© www.soinside.com 2019 - 2024. All rights reserved.