Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ScrollView在动态创建的元素中不起作用_C#_Uwp_Win Universal App_Windows 10 Universal_Frameworkelement - Fatal编程技术网

C# ScrollView在动态创建的元素中不起作用

C# ScrollView在动态创建的元素中不起作用,c#,uwp,win-universal-app,windows-10-universal,frameworkelement,C#,Uwp,Win Universal App,Windows 10 Universal,Frameworkelement,我需要以友好的方式创建一些框架元素。我有一个StackPanel,我在它里面创建了一个枢轴,有一个PivotItem,在一个ScrollViewer里面创建了一个StackPanel和按钮,如下所示: Pivot pivot = new Pivot(); PivotItem pivotItem = new PivotItem(); pivot.Items.Add(pivotItem); ScrollViewer scrollViewer = new ScrollViewer(); Stack

我需要以友好的方式创建一些框架元素。我有一个StackPanel,我在它里面创建了一个枢轴,有一个PivotItem,在一个ScrollViewer里面创建了一个StackPanel和按钮,如下所示:

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进行“充电”以使滚动工作。

您需要将IsVerticalScrollEnabled设置为true,从而为元素提供MaxHeight 但更好的解决方案是ListView或GridView为它们提供最大高度属性,然后您希望滚动条出现

    <StackPanel x:Name="stkPanel" isVerticalScrollEnabled = "true" MaxHeight="300"> 
</StackPanel>

问题出在StackPanel上。正如Schumi1331所说,堆栈面板使用了它所需要的空间,son从来没有定义宽度或高度,scrollViewer也没有像预期的那样工作。如果我按网格进行更改,效果很好


另一个解决方案是,在插入dinnamics元素后,计算使用这些元素的空间大小,并设置StackPanel的高度。

在XAML中创建所有内容时,您是否可以添加工作代码?但是基本上StackPanel使用了它所需要的空间,所以如果我没有错的话,StackPanel中的ScrollViewer就永远不会工作…这就是问题所在,该死的StackPanel。。。如果我改变它的网格,所有的工作都很好!将Pivot放在StackPanel而不是网格中有什么好处?在我的例子中,元素是通过webService的响应动态创建的,有很多类型,如Pivot、textbox等。因此我需要一个容器(StackPanel或网格或任何其他容器)将元素一个放置在另一个之下,所以,将它们放在Stackpanel中比放在网格中更容易(在网格中,您需要设置每个元素的行数)。无论如何,我已经重新编码了使用网格的函数,并且工作得很好!我懂了。也许下次可以选择使用RelativePanel和以下属性?您测试过此解决方案吗?我做到了,但似乎不起作用:(正如我在previus commets中所说的,它似乎与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);