2015-02-18 3 views
1

У меня есть метод, который добавляет несколько расширителей в wpf из ввода combobox. После выбора элемента combobox открывается OpenFileDialog и получает имя файла. Это происходит не один раз, и я, кажется, переписываю свой контент для расширителя. Код нижеКак динамически добавлять несколько элементов в расширитель в WPF

private void comboBox_SetFileNames(object sender, SelectionChangedEventArgs e) 
{ 
    var selectedItem = combobox.SelectedItem as ComboBoxItem; 
    if (selectedItem != null) 
     string name = selectedItem.Name; 
     Expander expander = new Expander {Header = name}; 

     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 
     dlg.DefaultExt = ".txt"; 
     dlg.Filter = "Text File (*.txt) | *.txt"; 
     Nullable<bool> result = dlg.ShowDialog(); 

     if (result == true) 
     { 
      expander.Content = new TextBlock() { Text = System.IO.Path.GetFileName(dlg.FileName) }; 
     } 

     dlg.Filter = "Excel Files (*.xlsx) | *.xlsx"; 
     Nullable<bool> result2 = dlg.ShowDialog(); 

     if (result2 == true) 
     { 
      expander.Content = new TextBlock() { Text = System.IO.Path.GetFileName(dlg.FileName) }; 
     } 
     dock.Children.Add(expander); 
    } 
} 

Любой способ иметь каждое из этих имен файлов, перечисленных ниже друг друга? так что-то вроде ниже

ExpanderName 
| 
------FileName1.txt 
| 
------FileName2.xlsx 

Сейчас с ним перезаписываются это выглядит следующим образом:

ExpanderName 
| 
------FileName2.xlsx 
+0

Установите 'expander.Content' в' StackPanel', и добавьте 'TextBlocks' в' StackPanel'. Свойству «Content» может быть задано только одно значение, а StackPanel может содержать несколько элементов управления. – Rachel

+0

Спасибо за информацию. Если вы хотите добавить это как ответ и дать небольшой пример, если хотите, я приму это как ответ. Еще раз спасибо! – trueCamelType

ответ

2

Установите свои expander.Content на панель, как StackPanel и добавить свой TextBlocks к нему вместо этого.

Свойство Content может быть установлено только на одно значение, а панель типа StackPanel может содержать несколько элементов управления.

Что-то вроде этого:

Expander expander = new Expander {Header = name}; 
StackPanel panel = new StackPanel(); 

var dlg = new Microsoft.Win32.OpenFileDialog(); 
dlg.DefaultExt = ".txt"; 
dlg.Filter = "Text File (*.txt) | *.txt"; 
Nullable<bool> result = dlg.ShowDialog(); 

if (result == true) 
    panel.Children.Add(new TextBlock() { Text = dlg.SafeFileName }); 

dlg.Filter = "Excel Files (*.xlsx) | *.xlsx"; 
Nullable<bool> result2 = dlg.ShowDialog(); 

if (result2 == true) 
    panel.Children.Add(new TextBlock() { Text = dlg.SafeFileName }); 

expander.Content = panel; 
dock.Children.Add(expander); 
Смежные вопросы