微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scrollviewbox提供了比我想要的更多的空间

如何解决Scrollviewbox提供了比我想要的更多的空间

| 我有这样定义的滚动视图框:
<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 ) );

           layoutRoot.Children.Add( border );
        }
     }
  }
现在我的问题是,如果我在根网格内创建10x10的网格(例如
CreateGrid(10,10)
),我最终会在滚动视图区域的右侧找到一吨空白。随着我创建的网格单元数量增加,空白空间似乎呈指数增长。垂直方向很好,可以正常缩放,但是水平方向则有很大的差距。网格可能只填充了5%的水平空间。 如何使滚动查看器仅覆盖其中的网格空间?     

解决方法

        发生这种情况是因为您的loop3ѭ位于内部循环中。对于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( );
        ...
    }
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。