xamarin形式:项目选择上具有重叠popupview的列表视图

问题描述

我正在尝试创建一个列表视图,当点击列表中的特定项目时,该项目的角落将显示一个弹出视图,并且该视图将与列表的其他项目重叠。

让我们说该列表包含三个项目:活动,非活动,非活动,当我单击第一个项目时,它将显示一个弹出视图/框架,该视图将在列表的第一项下和列表中的其他项下重叠/渲染。

我不确定是否可以实现,该怎么办?尝试使用绝对布局,但无法获得列表中各项的正确值。

任何人都可以帮助/建议如何实现它吗?

enter image description here

enter image description here

我在点击项目时尝试了以下代码

  void TapGestureRecognizer_Tapped(System.Object sender,System.EventArgs e)
            {
                var label1 = new Label { Text = "View" };
                var label2 = new Label { Text = "Edit" };
                var label3 = new Label { Text = "Delete" };
                var sl = new StackLayout { HorizontalOptions = Layoutoptions.End,VerticalOptions= Layoutoptions.FillAndExpand };
                sl.Children.Add(label1);
                sl.Children.Add(label2);
                sl.Children.Add(label3);
                var f = new Frame { HorizontalOptions = Layoutoptions.End,VerticalOptions = Layoutoptions.FillAndExpand };
                f.Content = sl;
                f.BackgroundColor = Color.AliceBlue;
                f.HeightRequest = 150;
                var bv = (sender as StackLayout).Children[1];
                //AbsoluteLayout.SetLayoutBounds(f,new Rectangle(bv.Width - 20,bv.Y,130,500));
                //AbsoluteLayout.SetLayoutFlags(f,AbsoluteLayoutFlags.All);
                //(sender as StackLayout).Children.Add(f);
    
                AbsoluteLayout.SetLayoutBounds(f,new Rectangle(0.5,0.5,110,25));
                AbsoluteLayout.SetLayoutFlags(f,AbsoluteLayoutFlags.PositionProportional);
                (sender as StackLayout).Children.Add(f);
        }

它没有用。视图的高度大约只有几个像素。 [![在此处输入图片描述] [3]] [3]

解决方法

如果需要使用此方法来实现,则可以计算自定义ls的位置。

例如,如果Xaml代码如下:

Frame

然后,您可以为此<ContentPage.Content> <RelativeLayout x:Name="mylayout"> <ListView x:Name="MyListView" HasUnevenRows="True" ItemSelected="MyListView_ItemSelected" ItemsSource="{Binding items}" IsVisible="True"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> ... </DataTemplate> </ListView.ItemTemplate> </ListView> </RelativeLayout> </ContentPage.Content> 添加子视图:

mylayout

根据点击索引,我们可以计算出自定义框架的private void MyListView_ItemSelected(object sender,SelectedItemChangedEventArgs e) { //Navigation.PushAsync(new MainPage()); var label1 = new Label { Text = "View" }; var label2 = new Label { Text = "Edit" }; var label3 = new Label { Text = "Delete" }; var sl = new StackLayout { HorizontalOptions = LayoutOptions.End,VerticalOptions = LayoutOptions.FillAndExpand }; sl.Children.Add(label1); sl.Children.Add(label2); sl.Children.Add(label3); var f = new Frame { HorizontalOptions = LayoutOptions.End,VerticalOptions = LayoutOptions.FillAndExpand }; f.Content = sl; f.BackgroundColor = Color.AliceBlue; f.HeightRequest = 150; var Yposition = MyListView.Y + MyListView.RowHeight * TapIndex; mylayout.Children.Add(f,() => new Rectangle(MyListView.Width-120,Yposition,110,110)); }

效果:

enter image description here