0

我正在使用 Silverlight 在 Windows Phone 7 上编写应用程序。

我花了大约 3 个小时尝试向网格组件添加滚动条,这样当我在代码中动态添加很多东西时,我可以向下滚动查看它。

我的 XAML 看起来像这样:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <ScrollViewer VerticalScrollBarVisibility="Visible" Name="Scrolling">
        <ScrollViewer.Content>
          <Grid x:Name="myGrid" HorizontalAlignment="Left" Width="650" VerticalAlignment="Top" Height =" 300" Background="Red" Grid.Row="1"  Margin="12,108,0,0"/>
        </ScrollViewer.Content>
    </ScrollViewer>

    <Grid Grid.Row="1" Height="79" HorizontalAlignment="Left" Margin="0,405,0,0" Name="grid1" VerticalAlignment="Top" Width="728"> <!-- Not important -->
    </Grid>

    <Grid Grid.Row="1" Height="73" HorizontalAlignment="Left" Margin="12,12,0,0" Name="grid2" VerticalAlignment="Top" Width="704">  <!-- Not important -->
    </Grid>
</Grid>

然后在代码中:

myGrid.Children.Add(some_component);

我尝试了很多很多方法,但没有一个有效。任何人都可以帮忙吗?

4

2 回答 2

2

好的,您尝试过吗,因为您的布局似乎有点奇怪

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid> 
        ...Static content here
    </Grid>
    <ScrollViewer VerticalScrollBarVisibility="Visible" Grid.Row="1">
        ...Content that scales here
    </ScrollViewer>
    <Grid Grid.Row="2"> 
        ...Static content here
    </Grid>
</Grid>

这应该可以正常工作 - 它有助于理解 Grid 的工作原理。另外值得注意的是,大多数布局都可以在不使用边距的情况下移动 - 由于设备和分辨率的性质,使用边距进行布局是不好的做法。你的应用程序应该总是能很好地扩展——如果它们不能扩展,人们就会厌倦

网格有 3 种列/行模式 - 自动 ("auto")、绝对 ("300") 和填充 ("*")

自动- 网格单元仅缩放以适应其中的内容

绝对- 网格单元是您指定的大小

填充- 在计算任何其他具有自动/绝对值的单元格后,网格单元格填充所有剩余空间,与设置为也填充的其他单元格成比例

您还可以使用“2*”、“3*”等指定相对“填充”

所以:

<Grid.RowDefinitions>
    <RowDefinition Height="100" />
    <RowDefinition Height="*" />
    <RowDefinition Height="2*" />
    <RowDefinition Height="3*" />
</Grid.RowDefinitions>

将产生 4 行,第一行是 100 像素高,第三行是第二行高度的两倍,第四行是第二行高度的三倍。最后 3 行将填满所有剩余空间。

还值得注意的是,网格“*”填充了父容器 - 这对于填充应用程序中的剩余空间很有用

于 2012-07-01T10:58:01.767 回答
0

首先,您不能Grid如此轻松地向 a 动态添加内容,因为您还必须更新RowDefinitionsand ColumnDefinitions。如果您不指定这些定义,则子项将就地堆叠。

尝试使用StackPanelorWrapPanel代替,一旦孩子占据足够的空间,您应该会看到滚动条。

于 2012-06-30T11:51:28.413 回答