出于某些原因,我需要使用代码隐藏向表单中添加元素。
有一个主面板。通过单击按钮 - 我将添加一些内容,如下所示:
private void AddCodeKlantFieldButtonOnClick(object sender, RoutedEventArgs routedEventArgs)
{
var button = sender as Button;
if (button != null)
{
var panel = (StackPanel)button.Tag;
var stackPanel = new StackPanel { Orientation = Orientation.Horizontal };
AddLabel(stackPanel, "Klant van:", 135);
opzoekenLandVan = new OpzoekenCode(OpzoekenCodeTable.Klant, "");
opzoekenLandTot = new OpzoekenCode(OpzoekenCodeTable.Klant, "");
stackPanel.Children.Add(opzoekenLandVan);
AddLabel(stackPanel, "tot en met:", 100);
stackPanel.Children.Add(opzoekenLandTot);
var count = panel.Children.Count;
panel.Children.Insert(8, stackPanel);
}
}
工作正常!但是,如果我添加太多项目,表单上没有足够的空间 - 因此需要滚动查看器。我很新,无法弄清楚如何处理它。我试过这个:
var scrollViewer = new ScrollViewer();
scrollViewer.Content = panel;
scrollViewer.Visibility = Visibility.Visible;
scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
scrollViewer.CanContentScroll = true;
但滚动条没有出现。如果我尝试将其添加到表单
panel.Children.Add(的ScrollViewer);
我收到错误:
类型' System.InvalidOperationException'的例外情况发生在PresentationFramework.dll中但未在用户代码中处理
附加信息:遍历树时超出逻辑树深度。这可能表明树中有一个循环。
答案 0 :(得分:1)
在下面的代码中,您没有将scrollViewer添加到可视树中,因此它没有显示
response.sendRedirect("view.jsp");
上面的一行是
var scrollViewer = new ScrollViewer();
scrollViewer.Content = panel; //this does not add to visualtree
scrollViewer.Visibility = Visibility.Visible;
scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
scrollViewer.CanContentScroll = true;
所以在尝试将其添加到面板的孩子时会出错。
scrollViewer.Content = panel;
您看到了循环问题?第一行,你将面板放在scrollViewer中,下一行你将相同的scrollViewer放在面板中。
尝试注释掉scrollViewer.Content = panel但保留panel.Children.Add(scrollViwer),这应该将scrollViewer添加到visualtree。但由于它没有内容并且位于堆叠面板中,因此它可能因0宽度或高度而不可见。