WPF - Stackpanel 中多个扩展器的问题
WPF - Problem with multiple Expanders in a Stackpanel
我在使用 Expanders 时遇到了一些问题。我还是 WPF 的新手,也许我遗漏了一些重要的东西,但我不知道是什么。
所以我要做的是以编程方式将 Expanders 添加到 Stackpanel,然后将其添加到 Scrollviewer,然后将其添加到另一个 Stackpanel。
扩展器有 4 个文本块,每个内容都是动态的。
一切正常,除了只有我点击的第一个 Expander 显示数据。当我展开另一个 Expander 时,内容与第一个展开的内容相同。当我折叠之前的扩展时,我也只能在扩展的扩展器中看到数据。
这是我的代码:
public void CreateDocuments(IcddContainerParser container)
{
DirectoryInfo docDir = new DirectoryInfo(container.GetDocumentFolder());
ScrollViewer scrollViewer = new ScrollViewer();
TextBlock title = new TextBlock();
TextBlock lastEdited = new TextBlock();
TextBlock extension = new TextBlock();
TextBlock size = new TextBlock();
StackPanel textBlockPanel = new StackPanel();
StackPanel expanderPanel = new StackPanel();
foreach (FileInfo file in docDir.GetFiles())
{
Expander expander = new Expander();
textBlockPanel.Children.Clear();
expander.Content = null;
expander.Header = file.Name.ToString();
title.Text = "File Location: " + file.FullName;
textBlockPanel.Children.Add(title);
lastEdited.Text = "Last edited: " + file.LastWriteTime;
textBlockPanel.Children.Add(lastEdited);
extension.Text = "File Type: " + file.Extension;
size.Text = "File Size: " + file.Length.ToString() + " bytes";
textBlockPanel.Children.Add(size);
expander.Content = textBlockPanel;
expander.Name = System.IO.Path.GetFileNameWithoutExtension(file.Name);
expanderPanel.Children.Add(expander);
}
scrollViewer.Content = expanderPanel;
DataPanel.Children.Add(scrollViewer);
return;
}
我的问题:
- 扩展器在扩展多个扩展器时表现异常(见上文)
- Expander TextBlocks 仅显示来自第一个展开的 Expander 的内容
究竟是什么导致了这种行为?或者您有任何其他方法来避免这种行为吗?如果有任何帮助,我将不胜感激。
编辑:
我已经尝试创建一个 Expander 数组,但是在向每个 Expander 添加内容时我得到了 NullReferenceExceptions
。
我还尝试只使用该函数一次,然后在循环中调用该函数并添加一个 FileInfo file
作为参数,但这只会让情况变得更糟。
替换
textBlockPanel.Children.Clear();
和
textBlockPanel = new StackPanel();
我在使用 Expanders 时遇到了一些问题。我还是 WPF 的新手,也许我遗漏了一些重要的东西,但我不知道是什么。
所以我要做的是以编程方式将 Expanders 添加到 Stackpanel,然后将其添加到 Scrollviewer,然后将其添加到另一个 Stackpanel。
扩展器有 4 个文本块,每个内容都是动态的。
一切正常,除了只有我点击的第一个 Expander 显示数据。当我展开另一个 Expander 时,内容与第一个展开的内容相同。当我折叠之前的扩展时,我也只能在扩展的扩展器中看到数据。
这是我的代码:
public void CreateDocuments(IcddContainerParser container)
{
DirectoryInfo docDir = new DirectoryInfo(container.GetDocumentFolder());
ScrollViewer scrollViewer = new ScrollViewer();
TextBlock title = new TextBlock();
TextBlock lastEdited = new TextBlock();
TextBlock extension = new TextBlock();
TextBlock size = new TextBlock();
StackPanel textBlockPanel = new StackPanel();
StackPanel expanderPanel = new StackPanel();
foreach (FileInfo file in docDir.GetFiles())
{
Expander expander = new Expander();
textBlockPanel.Children.Clear();
expander.Content = null;
expander.Header = file.Name.ToString();
title.Text = "File Location: " + file.FullName;
textBlockPanel.Children.Add(title);
lastEdited.Text = "Last edited: " + file.LastWriteTime;
textBlockPanel.Children.Add(lastEdited);
extension.Text = "File Type: " + file.Extension;
size.Text = "File Size: " + file.Length.ToString() + " bytes";
textBlockPanel.Children.Add(size);
expander.Content = textBlockPanel;
expander.Name = System.IO.Path.GetFileNameWithoutExtension(file.Name);
expanderPanel.Children.Add(expander);
}
scrollViewer.Content = expanderPanel;
DataPanel.Children.Add(scrollViewer);
return;
}
我的问题:
- 扩展器在扩展多个扩展器时表现异常(见上文)
- Expander TextBlocks 仅显示来自第一个展开的 Expander 的内容
究竟是什么导致了这种行为?或者您有任何其他方法来避免这种行为吗?如果有任何帮助,我将不胜感激。
编辑:
我已经尝试创建一个 Expander 数组,但是在向每个 Expander 添加内容时我得到了 NullReferenceExceptions
。
我还尝试只使用该函数一次,然后在循环中调用该函数并添加一个 FileInfo file
作为参数,但这只会让情况变得更糟。
替换
textBlockPanel.Children.Clear();
和
textBlockPanel = new StackPanel();