You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:15:36