2015-11-11 9 views
2

В Литт Test Application У меня есть следующий ContentPage:Ярлык в приложении Xamarin.Forms правильно не выровнять текст на WinPhone

public class LoginPage:ContentPage 
{ 
    public LoginPage() 
    { 
     Label l = Device.OnPlatform<Label>(
     new Label 
     { 
      HeightRequest = 150, 
      XAlign = TextAlignment.Center, 
      YAlign = TextAlignment.Center, 
     }, 
     new Label 
     { 
      HeightRequest = 120, 
      XAlign = TextAlignment.Center, 
      YAlign = TextAlignment.Center, 
     }, 
     new Label 
     { 
      HeightRequest = 500, 
      XAlign = TextAlignment.Center, 
      YAlign = TextAlignment.End, 
     }); 
     l.Text = "App Login"; 
     l.FontSize = 30; 

     StackLayout sl = new StackLayout() 
     { 
      BackgroundColor = Color.FromHex("559db7ec"), 
      HorizontalOptions = LayoutOptions.Fill, 
      VerticalOptions = LayoutOptions.Fill, 
      Children = 
      { 
       new StackLayout 
       { 
        HorizontalOptions = LayoutOptions.Center, 
        VerticalOptions = LayoutOptions.Center, 
        Children = 
        { 
         l, 
         //new Label{ Text = "MaintMobile", FontSize = 30, HeightRequest = 120, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center }, 
         new Label{ Text = "Please login", FontSize = 15, HeightRequest = 90, XAlign = TextAlignment.Center, YAlign = TextAlignment.Center }, 
         new Entry{ Placeholder = "Username", WidthRequest = 300 }, 
         new Entry{ Placeholder = "Password", IsPassword = true }, 
         new Button{ Text = "Login" } 
        } 
       } 
      } 
     }; 

     Content = sl; 
    } 
} 

Это MainPage из App. Хотя это отлично работает на Android, YAlign, похоже, не работает на WinPhone. Все время текст метки помещается в верхнюю часть устройства независимо от того, для чего я установил его для выравнивания.
Это может быть ошибка, или я делаю что-то неправильно?
Это было протестировано на Lumia 630 и 930

ответ

1

Если это работает на одной платформе, а не на другой, я бы сказал, что это ошибка.

Возможно, вы обнаружили, что высота метки не учитывается в этой компоновке в Windows и, следовательно, всегда выглядит так, как будто она наверху, но то, что на самом деле происходит, - это высота метки не то, что вы ожидаете.

Что я хотел бы порекомендовать, это установить VerticalOptions для запуска или центрирования, а не для выравнивания текста. Метка будет расширяться по мере необходимости.

Как другой способ взглянуть на макеты, я обычно рекомендую этот подход для выкладки чего-то централизованного, например, страницы входа. Сетка является самой быстрой для вычисления с точки зрения пользовательского интерфейса для Xamarin Forms.

<?xml version="1.0" encoding="utf-8" ?> 
<local:BasePage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:Mobile.View" 
      x:Class="Mobile.View.LoginPage"> 
    <Grid> 
    <Image Style="{StaticResource BackgroundImageStyle}" /> 
    <ContentView Style="{StaticResource OverlayStyle}" /> 
    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="350" /> 
     <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <Image Source="Logo.png" Grid.Row="0" VerticalOptions="End" HorizontalOptions="Center" /> 
     <StackLayout Grid.Row="1" VerticalOptions="CenterAndExpand"> 
     <Entry StyleId="EmailEntry" Text="{Binding Model.Email}" Placeholder="Email (is demo)" /> 
     <Entry StyleId="PasswordEntry" Text="{Binding Model.Password}" IsPassword="True" Placeholder="Password (is demo)" /> 
     <Button Command="{Binding LoginCommand}" StyleId="LoginButton" Text="Login" IsEnabled="{Binding IsBusy, Converter={StaticResource NotConverter}}" /> 
     </StackLayout> 
    </Grid> 
    </Grid> 
</local:BasePage> 

К сожалению его в XAML, я работаю с XAML для представлений, но вы можете видеть, я использую сетку, с 3-мя рядами, а верхние и нижние являются *, в то время как средний имеет определенную высоту.

Обычно я рекомендую этот тип макета для чего-то, что вы хотите сосредоточить, поскольку StackLayouts или RelativeLayouts могут быть сложными. Расчеты, которые идут на их рендеринг, также приводят к ошибкам и плохой производительности пользовательского интерфейса.

+0

Ну, высота считается, остальная часть макета задвигается вниз, когда я увеличиваю значение HeightRequest. Текст просто застрял сверху. XAML для меня не проблема, поскольку я просто тестирую свой путь в Xamarin.Forms. Возможно, в какой-то момент я переключусь с кодированного пользовательского интерфейса на интерфейс XAML. Грид работает отлично, об этом не думал вчера. – EaranMaleasi

Смежные вопросы