C# 屏幕宽度返回负数

C# 屏幕宽度返回负数,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我想从我的页面中获取网格宽度,因此我尝试了以下方法: public MemeBuilder() { InitializeComponent(); ColumnWidth = (MainGrid.Width - (8 * 5)) / 7; .... 但是主网格宽度返回-1 以下是网格的xaml: <Grid x:Name="MainGrid"> <Grid.RowDefinitions> <RowDefinition

我想从我的页面中获取网格宽度,因此我尝试了以下方法:

public MemeBuilder()
{
    InitializeComponent();

    ColumnWidth = (MainGrid.Width - (8 * 5)) / 7;
    ....
但是主网格宽度返回-1

以下是网格的xaml:

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

我做错了什么?

我错了,你使用的是xamarin表单。我认为你没有得到宽度,因为生命周期就像@Peter B所说的那样。 启动事件

protected override void OnStart()
{
      ColumnWidth = (MainGrid.width- (8 * 5)) / 7;
}
或 如果网格位于另一个页面中,则显示页面事件

protected async override void OnAppearing()
            {
            if(!isLoaded) 
                {
                //Do API Calls
                isLoaded=true;
                }
        }

我的错误是,您使用的是xamarin表单。我认为您没有获得宽度,因为生命周期就像@Peter B所说的那样。 启动事件

protected override void OnStart()
{
      ColumnWidth = (MainGrid.width- (8 * 5)) / 7;
}
或 如果网格位于另一个页面中,则显示页面事件

protected async override void OnAppearing()
            {
            if(!isLoaded) 
                {
                //Do API Calls
                isLoaded=true;
                }
        }
您可以订阅SizeChanged事件,并从中获得宽度:

您可以订阅SizeChanged事件,并从中获得宽度:


处理此问题的最佳方法是使用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;
祝你好运


如果您有问题,请回复处理此问题的最佳方法是使用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;
祝你好运


如果您有问题,请还原网格不包含ActualWidth的定义网格不包含ActualWidth的定义元素的宽度在布局阶段从-My guess is设置,您可能试图过早访问它。元素的宽度在布局阶段从-My guess is设置,“你可能试图访问它太早了。”提问者问错了问题。在家长most布局上,他想要的是宽度--@ColeXia MSFT,提问者问错了他的问题。在父most布局上,他需要宽度-_-