繁体   English   中英

ScrollView在动态创建的元素内不起作用

[英]ScrollView does not work inside a dynamically created element

我需要动态创建一些FrameworkElements。 我有一个StackPanel,并在其中创建一个带有一个PivotItem的Pivot,并在一个带有StackPanel和Button的ScrollViewer中创建如下:

Pivot pivot = new Pivot();
PivotItem pivotItem = new PivotItem();

pivot.Items.Add(pivotItem);

ScrollViewer scrollViewer = new ScrollViewer();
StackPanel stackContent = new StackPanel();

scrollViewer.Content = stackContent;

pivotItem.Content = scrollViewer;

stackContent.Children.Add(new Button() { Content = "button 1" });
stackContent.Children.Add(new Button() { Content = "button 2" });
stackContent.Children.Add(new Button() { Content = "button 3" });
stackContent.Children.Add(new Button() { Content = "button 4" });
stackContent.Children.Add(new Button() { Content = "button 5" });
stackContent.Children.Add(new Button() { Content = "button 6" });
stackContent.Children.Add(new Button() { Content = "button 7" });
stackContent.Children.Add(new Button() { Content = "button 8" });
stackContent.Children.Add(new Button() { Content = "button 9" });
stackContent.Children.Add(new Button() { Content = "button 10" });
stackContent.Children.Add(new Button() { Content = "button 11" });

stkPanel.Children.Add(pivot);

这是C#XAML代码:

<StackPanel x:Name="stkPanel">
</StackPanel>

如果尝试在XAML中创建所有元素,则ScrollViewer会按预期工作,但是当页面中发生某些事件时,我需要动态创建它们。

在调试中检查页面,PivotItem具有“ ActualHeight == 0”,因此我认为其中的ScrollViewer不能正常工作,但是我不知道如何修复它,也许可以对ScrollViewer说一些“重新充电”的方法使滚动工作。

问题是StackPanel。 正如Schumi1331所说,堆栈面板会使用所需的空间,子面板永远不会有定义的宽度或高度,scrollViewer不能正常工作。 如果按网格更改,效果很好。

另一种解决方案是在插入dinnamics元素之后计算使用此元素有多少空间,并将高度设置为StackPanel。

您需要将IsVerticalScrollEnabled设置为true,以使元素具有MaxHeight,但更好的解决方案是使用ListView或GridView为其提供Max Height属性,然后在其中显示滚动条。

    <StackPanel x:Name="stkPanel" isVerticalScrollEnabled = "true" MaxHeight="300"> 
</StackPanel>
Pivot pivot = new Pivot();
        PivotItem pivotItem = new PivotItem();

        pivot.Items.Add(pivotItem);

        ScrollViewer scrollViewer = new ScrollViewer();
        StackPanel stackContent = new StackPanel();

        scrollViewer.Content = stackContent;
        Window.Current.Activate();
        var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
        scrollViewer.Height = bounds.Height;
        pivotItem.Content = scrollViewer;

        stackContent.Children.Add(new Button() { Content = "button 1" });
        stackContent.Children.Add(new Button() { Content = "button 2" });
        stackContent.Children.Add(new Button() { Content = "button 3" });
        stackContent.Children.Add(new Button() { Content = "button 4" });
        stackContent.Children.Add(new Button() { Content = "button 5" });
        stackContent.Children.Add(new Button() { Content = "button 6" });
        stackContent.Children.Add(new Button() { Content = "button 7" });
        stackContent.Children.Add(new Button() { Content = "button 8" });
        stackContent.Children.Add(new Button() { Content = "button 9" });
        stackContent.Children.Add(new Button() { Content = "button 10" });
        stackContent.Children.Add(new Button() { Content = "button 11" });

        stkPanel.Children.Add(pivot);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM