0

我需要动态地创建一些 FrameworkElements。我有一个 StackPanel,我在其中创建了一个 Pivot,一个 PivotItem,一个带有 StackPanel 和按钮的 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 说“给自己充电”使滚动工作。

4

3 回答 3

1

问题是堆栈面板。正如 Schumi1331 所说,堆栈面板根据需要使用尽可能多的空间,儿子从来没有定义宽度或高度,并且 scrollViewer 无法按预期工作。如果我按网格更改,则可以正常工作。

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

于 2017-01-23T08:46:25.447 回答
0
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);
于 2017-01-24T17:55:09.653 回答
0

您需要将 IsVerticalScrollEnabled 设置为 true,为您的元素提供 MaxHeight,但更好的解决方案是 ListView 或 GridView 为它们提供 Max Height 属性,之后您希望滚动条出现。

    <StackPanel x:Name="stkPanel" isVerticalScrollEnabled = "true" MaxHeight="300"> 
</StackPanel>
于 2017-01-22T16:48:58.623 回答