2012-06-30 48 views
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); 

我试过很多的方法很多,但没有工作。 任何人都可以帮忙吗?

+0

哪里的DataGrid你正在谈论在应用剩余空间有用吗?我只看到一个网格... – Charleh

+0

可以滚动浏览器的ContentProperty是内容,这样你就不需要指定ScrollViewer.Content ...标签是多余的 – Charleh

+0

我的坏,这不是一个DataGrid,但电网。关于ContentPropety - 我试图用很多方式解决这个问题,其中一个解决方案包括添加这个属性。但问题仍然没有解决。我怎样才能添加一个滚动条到网格组件? – user1147467

回答

1

首先,你不能动态地为Grid添加的东西这么容易,因为你必须更新RowDefinitionsColumnDefinitions为好。如果您没有指定这些定义,那么这些孩子将会就地堆叠起来。

尝试使用StackPanelWrapPanel代替,只要孩子占用足够的空间,您应该会看到滚动条。

+0

编号没有帮助。我尝试了两个StackPanel和WrapPanel,滚动条并没有出现,即使我在XAML中添加了很多项目(更不用说动态地添加它们)。编译后,当我尝试滚动面板时,整个面板上升,它应该只滚动它的内容...:/ – user1147467

+0

另外,将'Width =“650”'和'Height =“300”'放在ScrollViewer“,而不是在其内部面板上。 – herzmeister

3

好你尝试过这一点,因为你的布局似乎有点怪

<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> 

这应该很好地工作 - 它有助于了解电网是如何工作的。另外值得注意的是,大多数布局都可能不使用边距来移动东西 - 由于设备和解决方案的性质,使用边距进行布局是不好的做法。自动(“自动”),绝对(“300”)和填充(“*”)的网格有3列/行模式。 )

自动 - 网格单元只进行缩放以适应里面的内容就

绝对 - 网格单元是您指定

填写大小 - 网格单元填充所有剩余任何其他空间R 2与汽车电池/绝对已经计算出,按比例而被设定为了还填补

您也可以speicify使用相对“填充”等细胞“2 *”,“3 *”等

所以:

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

将导致4行,第一行是100个像素高,第3行是第2行的高度的两倍和第4行的3倍的第2行的高度。最后3行将填满所有剩余的空间。

另外值得一提的是网格“*”充满父容器 - 这是填补了