Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 在Xamarin.Forms中的代码隐藏中创建多个帧_Xaml_Xamarin_Xamarin.forms_Xamarin.android_Xamarin.ios - Fatal编程技术网

Xaml 在Xamarin.Forms中的代码隐藏中创建多个帧

Xaml 在Xamarin.Forms中的代码隐藏中创建多个帧,xaml,xamarin,xamarin.forms,xamarin.android,xamarin.ios,Xaml,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我想在代码隐藏中创建多个帧,但在循环中创建帧并在内容中添加元素时,只有一个帧具有所有元素,而其他帧为空!为什么? 我的代码是: private void searchResults_ItemTapped(object sender, ItemTappedEventArgs e) { searchResults.IsVisible = false; Indexes Indexes = (Indexes)searchResults.SelectedItem; _viewMo

我想在代码隐藏中创建多个帧,但在循环中创建帧并在内容中添加元素时,只有一个帧具有所有元素,而其他帧为空!为什么?

我的代码是:

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();
    StackLayout WordDetail = new StackLayout();

    foreach (var dt in _viewModel.Items)
    {
        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 });
}
结果如下:


在循环的每次迭代中,您都使用相同的
WordDetail
实例

而是每次创建一个新实例

foreach (var dt in _viewModel.Items)
{
  StackLayout WordDetail = new StackLayout();

我复制了你的代码,在本地重现了你的情况。我通过将WordDetail声明移动到foreach中解决了这个问题,如下所示:

StackLayout Words = new StackLayout();

foreach (var dt in _viewModel.Items)
{
    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 } } });
}

你的问题解决了吗?是的,我通过在循环中移动WordDetail来解决它