WPF - 将scrollviewer添加到具有代码隐藏的面板

时间:2016-06-23 17:16:11

标签: wpf

出于某些原因,我需要使用代码隐藏向表单中添加元素。

有一个主面板。通过单击按钮 - 我将添加一些内容,如下所示:

    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中但未在用户代码中处理

附加信息:遍历树时超出逻辑树深度。这可能表明树中有一个循环。

1 个答案:

答案 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宽度或高度而不可见。