从后面的代码每次输入键盘后调整 ListView 的大小(在 stacklayout 内)

Resize ListView (inside stacklayout) after each keyboard entry from code behind

-> xamarin 在每个键盘输入后调整列表视图的大小(在 stacklayout 内)- 来自后面的代码

(如果可以的话,想要这个跨平台吗?)

使用 SearchBar 允许用户搜索葡萄酒产品...当更改文本时,显示的结果会正确更新,但我想将 ListView 的大小更改为仅显示结果删除任何空白 space.

因此,例如在附加图片条目中 'Wine ' returns 12 个结果,显示所有....但 'Wine 1' 只有 4 个结果。所以我希望 ListView 在 'wine 12' 之后结束(根据结果)而不是不透明度覆盖屏幕的其余部分。

已经尝试了一些示例,例如: ListView inside StackLayout: How to auto resize the ListView?

但仍然无法运行有没有人看到我做错了什么谢谢

    <NavigationPage.TitleView>
            <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal">
                <SearchBar x:Name="SearchBar" TextChanged="SearchBar_TextChanged" HorizontalOptions="FillAndExpand" Placeholder="Search..." PlaceholderColor="Gray" TextColor="White" VerticalOptions="StartAndExpand"/>
            </StackLayout>
        </NavigationPage.TitleView>
     private void SearchBar_TextChanged(object sender1, TextChangedEventArgs e1)
            {
                StackSearchResults.IsVisible = true;
                int numberOfProducts = 0;
                SearchListView.ItemsSource = GetProducts(out numberOfProducts, e1.NewTextValue);
    
                SearchListView.RowHeight = 50;
    
                SearchListView.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) =>
                {
                    if (e.PropertyName == "ItemsSource")
                    {
                        try
                        {
                            if (SearchListView.ItemsSource != null)
                            {
                                SearchListView.HeightRequest = numberOfProducts * 50;
                            }
                        }
                        catch (Exception ex)
                        {
    
                        }
                    }
                };
    }

您只需分配一次 PropertyChanged 处理程序,而不是每次触发 TextChanged 时。这可能不是根本问题,但无济于事。您还应该确保在 UI 线程

上分配 HeightRequest