由于某些原因,我需要使用codebehind将元素添加到表单中。
有一个主面板。通过单击按钮-我向其中添加一些内容,如下所示:
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);
}
}
很好!但是,如果我添加了太多项目,则表单上没有足够的空间-因此将需要使用scrollviewer。我很新,无法弄清楚如何处理它。我尝试了这个:
var scrollViewer = new ScrollViewer();
scrollViewer.Content = panel;
scrollViewer.Visibility = Visibility.Visible;
scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
scrollViewer.CanContentScroll = true;
但是不会出现滚动条。如果我尝试将其添加到表单
panel.Children.Add(scrollViewer);
我收到一个错误:
PresentationFramework.dll中发生类型为'System.InvalidOperationException'的异常,但未在用户代码中处理
附加信息:遍历树时超出了逻辑树的深度。这可能表示树中有一个循环。
在下面的代码中,您没有将scrollViewer添加到可视树中,因此它没有显示
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;
因此,尝试将其添加到面板的子级时会收到错误消息。
panel.Children.Add(scrollViewer);
您看到循环问题了吗?第一行,您将面板放置在scrollViewer内,下一行,您将相同的scrollViewer放置在面板中。
尝试注释掉scrollViewer.Content = panel,但将panel.Children.Add(scrollViwer)留在其中,这会将scrollViewer添加到视觉树。但是由于宽度或高度为0,它可能不可见,因为它没有内容并且位于堆栈面板中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句