我有一个定义的滚动视图框:
<ScrollViewer Width="150" Height="150" HorizontalScrollBarVisibility="Auto">
<Grid Name="RootElement">
</Grid>
</ScrollViewer>
在代码隐藏中,我用更多的网格填充网格'RootElement',
void CreateGrid(uint _Columns, uint _Rows)
{
Grid layoutRoot = GetTemplateChild( "RootElement" ) as Grid;
Random rand = new Random( );
for(int r = 0; r < _Rows; r++)
{
layoutRoot.RowDefinitions.Add( new System.Windows.Controls.RowDefinition( ) { Height = new GridLength( 50, GridUnitType.Pixel ) } );
for(int c = 0; c < _Columns; c++)
{
layoutRoot.ColumnDefinitions.Add( new System.Windows.Controls.ColumnDefinition( ) { Width = new GridLength( 50, GridUnitType.Pixel ) } );
var border = new Border( );
Grid.SetColumn( border, c );
Grid.SetRow( border, r );
Color col = new Color();
col.A = (byte)rand.Next(255);
col.R = (byte)rand.Next(255);
col.G = (byte)rand.Next(255);
col.B = (byte)rand.Next(255);
border.Background = new SolidColorBrush( col );
border.BorderBrush = new SolidColorBrush( Color.FromArgb( 0xff, 0x33, 0x33, 0x33 ) );
layoutRoot.Children.Add( border );
}
}
}
现在我的问题是,如果我在根网格中创建10x10网格(例如,CreateGrid(10,10)
),我最终会在滚动视图区域右侧显示一吨白色空间。随着我创建的网格单元数量的增加,空白区域似乎呈指数级增长。垂直它很好,通常完全缩放,但水平地存在巨大的间隙。也许只有5%的水平空间由网格填充。
我怎样才能使滚动查看器只覆盖其内部网格的空间?
答案 0 :(得分:2)
之所以发生这种情况,是因为你在内循环中有layoutRoot.ColumnDefinitions.Add()
。对于10列和10行,最终每1行创建10列,总共100列和10行。
分别迭代行和列以首先创建列/行定义 。然后执行嵌套循环来创建控件。
for(int r = 0; r < _Rows; r++) {
layoutRoot.RowDefinitions.Add( new System.Windows.Controls.RowDefinition( ) { Height = new GridLength( 50, GridUnitType.Pixel ) } );
}
for(int c = 0; c < _Columns; c++) {
layoutRoot.ColumnDefinitions.Add( new System.Windows.Controls.ColumnDefinition( ) { Width = new GridLength( 50, GridUnitType.Pixel ) } );
}
for(int r = 0; r < _Rows; r++) {
for(int c = 0; c < _Columns; c++) {
var border = new Border( );
...
}
}