2015-07-19 9 views
0

Эй StackOverflow,C# StackPanel: старые элементы остаются после обновления значений

У меня возникли проблемы с определенной части моего приложения для Windows Store. Это изначально то, что отображается ... Initialized

и это то, что происходит, когда нажимается кнопка Show More Clicked

Как вы можете видеть, показать еще кнопку и исходная строка по-прежнему присутствует. Я попытался сделать кнопку «Показать больше», обновив TextBlock до значения «», и кнопка «Показать больше» все еще существует и доступна для кликов. Я также попытался очистить StackPanel и повторно добавить элементы безрезультатно.

Вот код, который я использовал для этого:

private async void Description_Loaded(object sender, RoutedEventArgs e) 
    { 
     await wiki; 
     if (wiki.Result.ContainsKey("real_name")) 
     { 
      TeamInfoTitle.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
      TeamDescription.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
      PopulateInfo(Description); 
     } 
     else if(wiki.Result.ContainsKey("current_members")) 
     { 
      CharacterInfoTitle.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
      Description.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
      PopulateInfo(TeamDescription); 
     } 
    }   
void expand_Click(object sender, RoutedEventArgs e) 
    { 
     HyperlinkButton button = (HyperlinkButton)sender; 
     button.Content = "Show Less"; 
     button.Click -= expand_Click; 
     button.Click += shrink_Click; 
     TextBlock text = (TextBlock)button.Tag; 
     text.Text = (string)text.Tag; 
    } 

    void shrink_Click(object sender, RoutedEventArgs e) 
    { 
     HyperlinkButton button = (HyperlinkButton)sender; 
     button.Content = "Show More"; 
     button.Click -= shrink_Click; 
     button.Click += expand_Click; 
     TextBlock text = (TextBlock)button.Tag; 
     string item = (string)text.Tag; 
     text.Text = item.Substring(0, item.LastIndexOf(" ", 150, 15)) + "..."; 
    } 

    private void PopulateInfo(Grid desc) 
    { 
     for (int i = 0; i < desc.RowDefinitions.Count; i++) 
     { 
      string value; 
      if (wiki.Result.TryGetValue((desc.Children[i] as TextBlock).Name, out value)) 
      { 
       FrameworkElement now = new TextBlock() { Text = value, FontSize = 24, TextWrapping = TextWrapping.Wrap }; 
       if (value.Length > 200) 
       { 
        TextBlock text = (TextBlock)now; 
        HyperlinkButton expand = new HyperlinkButton() { Content = "Show More", HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Right, VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom }; 
        expand.Tag = text; 
        expand.Click += expand_Click; 
        StackPanel stack = new StackPanel(); 
        text.Tag = value; 
        text.Text = value.Substring(0, value.LastIndexOf(" ", 150)) + "..."; 
        stack.Children.Add(text); 
        stack.Children.Add(expand); 
        now = stack; 
       } 
       Grid.SetRow(now, i); 
       Grid.SetColumn(now, 1); 
       now.Margin = new Thickness(0, 0, 0, 10); 
       desc.Children.Add(now); 
      } 
      else 
       desc.Children[i].Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
     } 
    } 

Любая помощь будет принята с благодарностью! Примечание. Описание и TeamDescription - это сетки, определенные в XAML.

+0

Вы уверены, что 'PopulateInfo' запускается только один раз? Вы должны разместить большую часть своей программы. – swistak

ответ

0

Оказалось, что код XAML запускал загруженное событие дважды, благодаря swistak для того, чтобы поставить меня на правильный путь!