如何使用 Xamarin.Forms 覆盖元素

cor*_*ore 6 xamarin.forms

我只是想在顶部创建一个自动完成元素,其中建议列表不会向下移动我的布局中的其余元素。

我可以尝试将Entry和包裹ListView在一个AbsoluteLayout容器中,但对我来说这听起来不是一个干净的解决方案。有没有不同的方法来实现这一目标?

Rui*_*nho 8

如果您使用 Grid,您可以覆盖内容并设置是否应该向左、向右、居中等。最后一个要添加的将在顶部,在您的情况下为 Entry。


Nic*_*sky 6

一直在使用 Grid,直到它开始因复杂的布局而随机崩溃。

无论如何,解决方案是使用 AbsoluteLayout。 https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/user-interface/layouts/absolute-layout

2 个居中叠加项目的示例:

    <AbsoluteLayout 
                 VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

     <BoxView
                       AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" 
                AbsoluteLayout.LayoutFlags="PositionProportional"          
              BackgroundColor="Red"
              HeightRequest="100"
              WidthRequest="100"/>

     <ActivityIndicator
                       AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" 
                AbsoluteLayout.LayoutFlags="PositionProportional"          
              IsRunning="True"
              VerticalOptions="CenterAndExpand"
              HorizontalOptions="CenterAndExpand"/>
</AbsoluteLayout>
Run Code Online (Sandbox Code Playgroud)

XAML 提示:

填充和扩展 XY:

AbsoluteLayout.LayoutBounds="0, 0, 1, 1" 
AbsoluteLayout.LayoutFlags="All"
Run Code Online (Sandbox Code Playgroud)

XY中心:

AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1"     
AbsoluteLayout.LayoutFlags="PositionProportional"
Run Code Online (Sandbox Code Playgroud)

垂直居中,水平填充:

AbsoluteLayout.LayoutBounds="0.5, 0.5, 1, -1" 
AbsoluteLayout.LayoutFlags="PositionProportional"
Run Code Online (Sandbox Code Playgroud)

垂直端,水平中心

AbsoluteLayout.LayoutBounds="0.5, 1, -1, -1" 
AbsoluteLayout.LayoutFlags="PositionProportional"
Run Code Online (Sandbox Code Playgroud)

垂直起点,水平中心

AbsoluteLayout.LayoutBounds="0.5, 0, -1, -1" 
AbsoluteLayout.LayoutFlags="PositionProportional"
Run Code Online (Sandbox Code Playgroud)

垂直开始,水平开始

AbsoluteLayout.LayoutBounds="0, 0, -1, -1" 
AbsoluteLayout.LayoutFlags="PositionProportional"
Run Code Online (Sandbox Code Playgroud)


小智 5

为了覆盖元素,您可以使用“绝对”和/或“相对”布局。

有使用“网格”覆盖的解决方法。为此,您需要将元素或“容器”放在同一行/单元格中。

这是示例:

<Grid>
    <Label Grid.Row="0" Text="test" VerticalTextAlignment="Center" />
    <Label Grid.Row="0" Text="overlay" VerticalTextAlignment="Center" />
</Grid>
Run Code Online (Sandbox Code Playgroud)