我有一个方法,可以从组合框的输入中在 wpf 中添加多个扩展器。选择组合框项后,将打开一个 OpenFileDialog,并获取文件名。这种情况发生了不止一次,我似乎正在覆盖扩展器的内容。代码如下
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
最佳答案
将您的 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);
关于c# - 如何在 WPF 中动态添加多个内容到扩展器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593549/