2013-09-18 1 views
0

Я хотел бы выполнить что-то вроде fb comment Layout.ListBox не автоматически расширяется с добавлением динамических данных через «PhoneTextBox» wp7

enter image description here

и я использую следующий код для выполнения этой задачи:

// Конструктора

string []content; 
    public MainPage() 
    { 
     InitializeComponent(); 

     content = new string[11] { "Great stories produce the ideas which help children to know how the cleverness and wise decisions take the people out of the dangerous and most tricky situations.", 
            "No virtue is as noble as kindness. The stories “Prince Frog”, “Dove and the ant” and others teaches them the importance of being kind to even to the small god made creatures of this earth.", 
            "Honesty is a key to success and honest people are duly rewarded. These stories show honesty is a most beautiful quality to be possessed, liked and appreciated.", 
            "Humbleness makes us kind hearted and soft spoken- the virtues which will always be deemed and valued in the eyes of the others.", 
            "Realize the importance of hard work through these evergreen stories. These popular stories are the inroads to the very roots of the concept “Hard work is a road to success.", 
            "If you speak the truth, your children will speak too. This would help them built the trust and reputation in their society and around them.", 
            "Courageous child can easily cross each milestones of life with ease, then why not we too help our children to be strong for the others too to follow.", 
            "True Friendship is a God’s precious gift and a commitment for togetherness, and sharing and caring.", 
            "Understand the value of being united, to overcome any difficult situation and understand the meaning of working in a team and grow as a virtuous and a strong human being.", 
            "Obeying the elders will ultimately be good for you. Stories like \"Three goats and the Wolf\" can help your children understand the value of being obedient.", 
            "Greediness leads to destruction. It causes obsession which is more harmful. Let us know how through these great stories." }; 

     populate_list(); 

    } 

    private void populate_list() 
    {   
     for (int i = 0; i < content.Length; i++) 
     { 
      //mainlist.Items.Add(content[i]); 
      var maintext = new TextBlock(); 
      maintext.Text = content[i]; 
      maintext.TextWrapping = TextWrapping.Wrap; 

      StackPanel stkpanel = new StackPanel(); 
      stkpanel.Width = 480; 
      stkpanel.Height = 124; 

      stkpanel.Children.Add(maintext); 

      var expander = new ExpanderView(); 

      var phonetextbox = new PhoneTextBox(); 
      phonetextbox.Hint = "Add a Comment"; 
      phonetextbox.ActionIcon = new System.Windows.Media.Imaging.BitmapImage(new Uri("/search.png", UriKind.RelativeOrAbsolute)); 

      StackPanel stkpanel_new = new StackPanel(); 
      stkpanel_new.Width = 480; 

      phonetextbox.ActionIconTapped += (s, e) =>     
      { 
       if (!string.IsNullOrEmpty(phonetextbox.Text)) 
       { 
        expander.Items.Add(phonetextbox.Text); 
        expander.IsExpanded = true; 

        //stkpanel_new.Height = stkpanel_new.Height + 20; 
       } 
      }; 

      stkpanel_new.Children.Add(phonetextbox); 
      stkpanel_new.Children.Add(expander); 

      mainlist.Items.Add(stkpanel); 
      mainlist.Items.Add(stkpanel_new); 

     } 
    } 

Но я получил вопрос о динамической вставке комментария, когда пользователь вводит текст в phonetextbox и нажмите на его значке комментарий просто добавлен за вторым элементом списка (означает, что ExpanderView будет расширен, но дополнительные элементы списка не будут динамически изменяться).

Am i Doing Что-то не так или это ограничение Framework? Помогите .

Привет

Пардип Шарм

+0

HI Ребята, я разделил свой код на ниже небо привод ссылки, пожалуйста, проверьте его и сохранить свою жизнь: ссылки: http://sdrv.ms/1a5Zc0l папки Имени: diary_list С уважением, Pardeep sharma – prdp89

ответ

0

для этого типа динамической высоты рекомендую контроль longlistselector, что полезно как в ориентации, и для основного использования контейнера сетки, который будет установить его самостоятельно в соответствии с размером по контенту, потому что его высота по умолчанию «Auto»

+0

Привет @techloverr, Как я упоминал выше, я динамически заполняю свой список, с longlistselector у нас нет никаких Items.Add(); метод для динамического добавления элементов. мы могли бы создать ItemTemplate со статическими данными в LongListSelector (по моим сведениям.) – prdp89

+0

да, но если вы привяжете наблюдаемую коллекцию LLS, то, если вы добавите элемент в эту коллекцию, она автоматически обновит пользовательский интерфейс, поэтому ваше требование будет выполнено. – techloverr

0

Замена вам обработчика действий по этому следует решить вашу проблему:

phonetextbox.ActionIconTapped += (s, e) =>     
     { 
      if (!string.IsNullOrEmpty(phonetextbox.Text)) 
      { 
       expander.Items.Add(phonetextbox.Text); 
       this.Dispatcher.BeginInvoke(() => { 
         expander.IsExpanded = true; 
       }); 

       //stkpanel_new.Height = stkpanel_new.Height + 20; 
      } 
     }; 

, но вы должны действительно изучить использование mvvm. Одним из значительных недостатков вашей реализации (среди многих других преимуществ архитектуры) является то, что вы потеряете преимущество виртуализации пользовательского интерфейса (A ListBox не создает весь элемент ui всех элементов, только тот, который открывается, и немного больше, но поскольку вы создаете их сами, вы потеряли эту выгоду).

+0

Hi Benoit, U не мог понять мою проблему, позвольте мне рассказать «когда я ввел несколько элементов через расширение, чтобы увидеть, что он просто перекрывается со следующими элементами списка, и это вызовет какой-то причудливый макет». Добавляя диспетчер, мы не можем решить проблему, и более того, с виртуализацией MVVM n я реализую ее на отдельном уровне. – prdp89

+0

Я на самом деле протестировал ваш код и увидел то же самое, что вы описываете и добавляете диспетчера в том месте, где я добавил, что это исправляло проблему для меня, но, возможно, проблема не совсем то же самое на вашем устройстве ... –

+0

На самом деле я просто увидел, что вы загрузили весь проект и протестировали, другая проблема заключается в том, что вы не используете последнюю версию инструментария для оконных телефонов (например, вы можете получить от nuget), просто обновите его, и он должен работать –

Смежные вопросы