Создайте несколько кадров в коде в Xamarin.Forms - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу создать несколько кадров в коде позади, но при создании кадров в цикле и добавлении элементов в контент, только один кадр имеет все элементы, а другие кадры пусты! почему?

Мой код:

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 });
}

И вот результат:

enter image description here

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Я воспроизвел вашу ситуацию локально, скопировав ваш код. Я решил это, переместив объявление 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 } } });
}
0 голосов
/ 09 ноября 2019

вы используете один и тот же экземпляр WordDetail в каждой итерации цикла

, вместо этого каждый раз создайте новый экземпляр

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