Configuração e tamanho dos formulários Xamarin sem configuração

sou um principiante em Xamarin e estou a tentar aprender a fazer elementos gráficos simples como botões e imagens. O meu problema é que quando tento mudar a dimensão ou a posição de um elemento (um botão no meu exemplo) nada parece realmente mudar.

Eu já tentei coisas como startButton.WidthRequest = 300; ou usando layout absoluto {[[3]} mas nada funcionou e na minha aplicação no emulador tudo parece estar definido no fundo do ecrã com uma altura predefinida e um largura do ecrã.

XAML (também tentou <AbsoluteLayout> mas tem o mesmo problema, tudo está definido no canto superior esquerdo da tela e setLayoutBounds ou WidthRequest não funciona)

<?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:TestImages;assembly=TestImages"
         x:Class="TestImages.MainPage">
<StackLayout x:Name="container1">
    <!-- Place new controls here -->
    <Label Text="Welcome to MyApp" HorizontalOptions="Center" VerticalOptions="StartAndExpand" />

    <Image Source="{local:ImageResource TestImages.kids2.png}"/>

    <Button x:Name="startButton"
            Text="START"
            Clicked="goToList" />

</StackLayout>
</Contenpage>

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace TestImages
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;

        var screenWidth = mainDisplayInfo.Width;
        Console.WriteLine($"Width: {screenWidth}");

        startButton.BackgroundColor = Color.LightGreen;
        startButton.BorderColor = Color.White;
        startButton.CornerRadius = 8;
        startButton.BorderWidth = 1.5;
        startButton.WidthRequest = 300;
        AbsoluteLayout.SetLayoutBounds(startButton, new Rectangle(0.5, 0.2, 200, 100));

        var bottone2 = new Button { Text = "Start222" };
        container1.Children.Add(bottone2);
        AbsoluteLayout.SetLayoutBounds(bottone2, new Rectangle(0.5, 0.2, 200, 100));
        bottone2.BackgroundColor = Color.Beige;


        Console.WriteLine($"Button: {startButton.Width}");
    }

    async void goToList(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.Write("Cliccato START");
        Console.Write("Cliccato START");
        await Navigation.PushAsync(new ListPage());

    }
  }
}

fiz com que imprimisse a largura do botão para depurar e diz que é = - 1, não sei porquê e o que significa.

enter image description here

Author: Poli97, 2019-11-14

2 answers

Agora eu adicionei {[[0]} e parece funcionar, mas não tenho a certeza do que exatamente esse comando faz e porque ele funciona

 0
Author: Poli97, 2019-11-14 17:54:48

A forma como coloquei uma imagem num Stack Layout é:

<StackLayout Orientation="Vertical" 
             BackgroundColor="#444444" 
             Padding="30" 
             Spacing="40">

    <Image HorizontalOptions="Fill" 
           HeightRequest="150" 
           Source="YourImage.png"/>
</StackLayout>
Apenas certifique-se que o caminho para a sua imagem está funcionando corretamente e você deve estar pronto para ir.

Também aprendi muito com o curso do CodeWithMosh Xamarin (mesmo que seja um pouco obsoleto): https://codewithmosh.com/

 0
Author: ProbablyNut, 2019-11-14 18:12:08