Xamarin中点击按钮动态创建Entry的位置调整问题
解决Xamarin动态添加Entry到按钮上方的问题
方案一:动态创建Entry并插入到按钮前(优先推荐)
核心思路是不直接将Entry添加到布局末尾,而是插入到按钮所在的位置,这样新Entry就会出现在按钮上方。
前端XAML结构(参考)
假设你的布局使用StackLayout(最常用的线性布局),结构如下:
<StackLayout x:Name="MainStackLayout"> <!-- 这里可以放其他已有控件 --> <Button x:Name="AddIngredientBtn" Text="Add Ingredient" Clicked="AddIngredientBtn_Clicked" /> </StackLayout>
后端C#代码
在按钮的点击事件中,创建Entry并插入到按钮的索引位置:
private void AddIngredientBtn_Clicked(object sender, EventArgs e) { // 创建新的Entry控件 var newIngredientEntry = new Entry { Placeholder = "输入食材名称", Margin = new Thickness(0, 10, 0, 0) // 可选:添加间距让布局更美观 }; // 获取按钮在StackLayout子控件中的索引 int btnIndex = MainStackLayout.Children.IndexOf(AddIngredientBtn); // 将新Entry插入到按钮的位置,按钮会自动下移 MainStackLayout.Children.Insert(btnIndex, newIngredientEntry); }
方案二:预先创建隐藏Entry,点击依次显示
如果不想动态创建控件,可以预先在布局中放置多个隐藏的Entry,点击按钮时依次显示下一个:
前端XAML结构
<StackLayout x:Name="MainStackLayout"> <!-- 预先创建多个隐藏的Entry --> <Entry x:Name="Entry1" Placeholder="输入食材名称" IsVisible="False" Margin="0,10,0,0"/> <Entry x:Name="Entry2" Placeholder="输入食材名称" IsVisible="False" Margin="0,10,0,0"/> <Entry x:Name="Entry3" Placeholder="输入食材名称" IsVisible="False" Margin="0,10,0,0"/> <!-- 可根据需求添加更多 --> <Button x:Name="AddIngredientBtn" Text="Add Ingredient" Clicked="AddIngredientBtn_Clicked" /> </StackLayout>
后端C#代码
private int _currentEntryIndex = 0; private List<Entry> _hiddenEntries; protected override void OnAppearing() { base.OnAppearing(); // 初始化时获取所有隐藏的Entry _hiddenEntries = MainStackLayout.Children.OfType<Entry>() .Where(entry => !entry.IsVisible) .ToList(); } private void AddIngredientBtn_Clicked(object sender, EventArgs e) { if (_currentEntryIndex < _hiddenEntries.Count) { // 显示当前索引对应的Entry _hiddenEntries[_currentEntryIndex].IsVisible = true; _currentEntryIndex++; } else { // 可选:所有Entry都显示后,禁用按钮或给出提示 AddIngredientBtn.IsEnabled = false; // 或者弹窗提示:"已添加所有可输入项" } }
补充说明
如果你的布局不是StackLayout(比如Grid),逻辑类似:找到按钮所在的布局位置,在其上方插入新控件或显示预先放置的控件即可。
内容的提问来源于stack exchange,提问作者user12722902
相关产品推荐
相关产品推荐

