首页 文章

如何将文本居中在水平StackLayout中?

提问于
浏览
3

我有这个StackLayout,我曾经在XAML中创建一个导航栏 . 此Horizontal StackLayout包含一个按钮和标签 . 问题是文本没有完全居中,我似乎无法在中间完美地完成它 . 有人可以帮我把这个文本集中在这个StackLayout中吗?顺便说一下,我正在使用Xamarin .

<!-- Nav Bar-->
<StackLayout Orientation="Horizontal" HeightRequest="45" BackgroundColor="{StaticResource Teal}">
  <StackLayout.Padding>
    <OnPlatform x:TypeArguments="Thickness"
                iOS="10,0,0,0"
                Android="0,0,0,0"
                WinPhone="0,0,0,0" />
  </StackLayout.Padding>
  <Button x:Name="btnBack" HorizontalOptions="Start" TextColor="White" BackgroundColor="Transparent"
          Command="{Binding BackCommand}" IsVisible="{Binding CanGoBack}" />
  <Label HorizontalOptions="CenterAndExpand" VerticalOptions="Center" TextColor="White" FontSize="24" Text="{Binding TitleBarText}" LineBreakMode="TailTruncation" />
</StackLayout>

正如您所看到的,应用 Headers 不在中心...

1 回答

  • 7

    当您想要将View放在特定位置时,StackLayout并不是很好 . 当你有很多观点时,这是很好的,你希望它们都以合理的方式出现 .

    如果你想要像素完美的东西,有两个很棒的布局:

    • AbsoluteLayout

    • RelativeLayout

    您可以在此处找到有关这些布局的一些重要信息:http://adventuresinxamarinforms.com/2015/05/05/demystifying-xamarin-forms-absolutelayout-and-relativelayout-positioning/

    对于你的具体问题,我会说使用AbsoluteLayout,因为用它来集中Label是非常容易的 . 对于此解决方案,我将Nav Bar的StackLayout更改为AbsoluteLayout,并在代码后面添加了布局参数 .

    XAML:

    <AbsoluteLayout x:Name="NavBarLayout" HeightRequest="45" BackgroundColor="Aqua">
         <Button x:Name="btnBack" TextColor="White" FontSize="40" BackgroundColor="Transparent" Text="&lt;" />
         <Label x:Name="labelTitle" TextColor="White" FontSize="24" Text="Hello World!" YAlign="Center" XAlign="Center" LineBreakMode="TailTruncation" />
    </AbsoluteLayout>
    

    背后的代码:

    public MyPage ()
        {
            InitializeComponent ();
    
            NavBarLayout.Children.Add (
                btnBack,
                // Adds the Button on the top left corner, with 10% of the navbar's width and 100% height
                new Rectangle(0, 0, 0.1, 1),
                // The proportional flags tell the layout to scale the value using [0, 1] -> [0%, 100%]
                AbsoluteLayoutFlags.HeightProportional | AbsoluteLayoutFlags.WidthProportional
            );
    
            NavBarLayout.Children.Add(
                labelTitle,
                // Using 0.5 will center it and the layout takes the size of the element into account
                // 0.5 will center, 1 will right align
                // Adds in the center, with 90% of the navbar's width and 100% of height
                new Rectangle(0.5, 0.5, 0.9, 1),
                AbsoluteLayoutFlags.All
            );
        }
    

相关问题