Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?

Posted

技术标签:

【中文标题】Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?【英文标题】:Xamarin - StackLayout inside NavigationPage.TitleView won't use all space? 【发布时间】:2020-02-15 01:43:31 【问题描述】:

我的一些应用程序的内容页面上有一个 TitleView,我希望包含所有文本的 StackLayout 来填充可用空间。但是,将其 Horizo​​ntalOptions 设置为 Fill 或 FillAndExpand 并不能像通常在 ContentPage 中那样工作,而是 StackLayout 仅与我在其中的标签一样宽。

我的 XAML 代码:

<NavigationPage.TitleView>
        <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" x:Name="TitleBarLayout">
            <Label Text="PageTitle"
                   TextColor="White"
                   FontSize="20"
                   FontAttributes="Bold"
                   HorizontalOptions="Start"
                   x:Name="PageTitle"/>
            <Label Text="Text1:"
                   FontSize="20"
                   TextColor="LightGray"
                   HorizontalOptions="End"/>
            <Label x:Name="Label1"
                   FontSize="20"
                   TextColor="Black"
                   HorizontalOptions="End"/>
            <Label Text="Text2:"
                   FontSize="20"
                   TextColor="LightGray"
                   HorizontalOptions="End"/>
            <Label x:Name="Label2"
                   FontSize="20"
                   TextColor="Black"
                   HorizontalOptions="End"/>
            <Label Text="Text3:"
                   FontSize="20"
                   TextColor="LightGray"
                   HorizontalOptions="End"/>
            <Label x:Name="Label3"
                   FontSize="20"
                   TextColor="Black"
                   HorizontalOptions="End"/>
        </StackLayout>
    </NavigationPage.TitleView>

所以理想情况下,我希望“PageTitle”标签紧挨着后退箭头,然后将其他所有内容放在导航栏的另一端 - 如您所见,我为 PageTitle 设置了 HorizontalOptions="Start",并且HorizontalOptions="End" 其他一切。

这段代码的结果是这样的:

想要的结果是这样的(在 Paint 中编辑):

我也尝试在 C# 中获取页面的宽度并为 PageTitle 标签设置边距,如下所示:

double width = App.Current.MainPage.Width / 4;
PageTitle.Margin = new Thickness (0,0,width,0);

但是因为我的应用程序设计用于任何纵向或横向设备,这会导致在太小的显示器上出现文本环绕错误。

除非绝对必要,否则请不要推荐自定义工具。

【问题讨论】:

将标签的所有水平选项设为 StartAndExpand 或 EndAndExpand 而不是 Start 和 End。 【参考方案1】:

您可以通过将第一个标签的HorizontalOptions 更改为FillAndExpandStartAndExpand 来解决此问题

<Label Text="PageTitle"
        TextColor="White"
        FontSize="20"
        FontAttributes="Bold"
        HorizontalOptions="StartAndExpand"
        x:Name="PageTitle"/>

这将“强制”其余项目移动到尽头。

希望这会有所帮助。-

【讨论】:

以上是关于Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin - NavigationPage.TitleView 内的 StackLayout 不会使用所有空间?

Xamarin.Forms - Android 全球不支持 PushAsync,请使用 NavigationPage

Xamarin QLPreviewController + NavigationPage 在 iOS 10 上损坏

为啥在使用 Prism 在 Xamarin.Forms 中导航到 root 时,我的 NavigationPage 顶部会出现默认标题?

Xamarin Forms/Prism 8 - 带有 NavigationPage 导航的 TabbedPage 无法正常工作

在 Xamarin.Forms 实现页面全屏显示