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

Xamarin.Forms代码后台循环创建Frame仅一个有元素,其余为空原因

问题原因分析

你遇到的这个问题核心在于同一个StackLayout实例只能被绑定到一个父控件上。你在循环外部创建了WordDetail这个StackLayout容器,然后每次循环都把它赋值给新创建的Frame的Content。当你把它添加到第二个Frame时,它会自动从第一个Frame的Children集合中移除,最后自然只有最后一个Frame能保留这个StackLayout,前面的Frame就都变成空的了。

修复方案

把WordDetail的创建逻辑移到循环内部,让每个Frame都拥有自己独立的StackLayout容器,这样每个Frame的内容就不会被覆盖或移走了。修改后的代码如下:

private void searchResults_ItemTapped(object sender, ItemTappedEventArgs e) {
    searchResults.IsVisible = false;
    Indexes Indexes = (Indexes)searchResults.SelectedItem;
    _viewModel.Items.Add(db.RequestToJson(Indexes.Index));
    searchbar.Text = string.Empty;
    StackLayout Words = new StackLayout();
    
    foreach (var dt in _viewModel.Items) {
        // 每次循环都新建一个独立的WordDetail容器
        StackLayout WordDetail = new StackLayout();
        
        AddTextToLabel(nameof(dt.Word), dt.Word, WordDetail);
        var BaseLang = dt.BaseLang;
        AddTextToLabel(nameof(BaseLang.Meaning), BaseLang.Meaning, WordDetail);
        
        Words.Children.Add(new Frame {
            BackgroundColor = Color.FromHex("2196F3"),
            Padding = 5,
            HasShadow = false,
            Margin = new Thickness(10, 10, 80, 10),
            Content = new StackLayout {
                Children = { WordDetail }
            }
        });
    }
    SearchResult.Content = Words;
    SearchResult.IsVisible = true;
}

private void AddTextToLabel(string title, string data, StackLayout worddetail) {
    worddetail.Children.Add(new Label {
        Text = title + ":",
        FontAttributes = FontAttributes.Bold,
        TextColor = Color.White
    });
    worddetail.Children.Add(new Label {
        Text = data,
        TextColor = Color.White
    });
}
额外补充

在Xamarin.Forms(以及大多数UI框架)中,所有可视化元素都有唯一的Parent属性,当你尝试将同一个元素添加到另一个父控件时,框架会自动将它从原父控件中移除——这是为了保证UI层级结构的唯一性和合理性。所以如果需要为多个父控件提供内容,一定要为每个父控件创建独立的子元素实例。

内容的提问来源于stack exchange,提问作者Ali Naeimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:30:46