【问题标题】:How to get screen size from C# code to XAML?如何从 C# 代码获取屏幕大小到 XAML?
【发布时间】:2019-12-28 01:10:12
【问题描述】:

我知道如何从代码中获取屏幕尺寸。但是如何将这些数字传递给 XAML,以便正确绘制屏幕?我正在尝试制作一个具有 3 行的基本网格。中间的高度应与设备屏幕宽度相同。我现在拥有的是:

<Grid BackgroundColor="Black">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="I DONT KNOW WHAT TO PUT HERE :S" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid Grid.Row="1" BackgroundColor="Blue" Margin="10" />
</Grid>

对我来说,这似乎是一件非常基本的事情,但我找不到任何关于如何做到这一点的示例。

【问题讨论】:

  • 你可以从你的模型中绑定一个属性
  • 这是什么意思? :o
  • 非常感谢!这看起来很有希望。

标签: c# android xaml xamarin


【解决方案1】:

您可以通过Xamarin.Essentials: Device Display Information 获取设备信息,创建一个名为Constant 的结构并在那里定义ScreenWidthScreenHeight

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

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

    }
}

public struct Constant
{
    public static double ScreenWidth = DeviceDisplay.MainDisplayInfo.Width / DeviceDisplay.MainDisplayInfo.Density;
    public static double ScreenHeight = DeviceDisplay.MainDisplayInfo.Height / DeviceDisplay.MainDisplayInfo.Density;
}

在 xaml 中使用它:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             xmlns:local="clr-namespace:App105"
             x:Class="App105.MainPage">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="{Binding Source={x:Static local:Constant.ScreenWidth}}" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Label Text="Top Left" BackgroundColor="Red" Grid.Row="0" Grid.Column="0" />
        <Label Text="Top Right" BackgroundColor="Blue" Grid.Row="0" Grid.Column="1" />
        <Label Text="middle Left" BackgroundColor="Green" Grid.Row="1" Grid.Column="0" />
        <Label Text="middle Right" BackgroundColor="Yellow" Grid.Row="1" Grid.Column="1" />
        <Label Text="Bottom Left" BackgroundColor="Orange" Grid.Row="2" Grid.Column="0" />
        <Label Text="Bottom Righ" BackgroundColor="Pink" Grid.Row="2" Grid.Column="1" />
    </Grid>

</ContentPage>

【讨论】:

  • 非常感谢老板!新年快乐! :)
  • @BladeZ 新年快乐! :)
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多