Silverlight - Scrollviewer中的DataGrid,Column.Width =“*”使datagrid占用几个屏幕宽度

时间:2011-04-13 16:03:27

标签: silverlight silverlight-4.0 datagrid scrollviewer

当我进行以下设置时,宽度为*的最后一列会导致数据网格创建巨大的水平滚动条(将网格扩展到屏幕的几个宽度)。我不确定为什么会这样,但我真的需要一种方法来避免这种情况。我不想用*长度“模拟”列。

编辑:显然我并不是唯一注意到这一点的人。 http://connect.microsoft.com/VisualStudio/feedback/details/559644/silverlight-4-datagrid-star-column-width

的Xaml:

<ScrollViewer Padding="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"  >
    <sdk:DataGrid AutoGenerateColumns="False" x:Name="dg"/>
</ScrollViewer>

代码:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("A"), Header = "A" });
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("B"), Header = "B" });
        dg.Columns.Add(new DataGridTextColumn { Binding = new Binding("C"), Header = "C" });
        dg.Columns[2].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
        dg.ItemsSource = new[] 
        {
            new I { A = "SAF", B = "SAF", C = "SAF" },
            new I { A = "SAF", B = "SAF", C = "SAF" },
            new I { A = "SAF", B = "SAF", C = "SAF" }
        };
    }

    public class I
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }

2 个答案:

答案 0 :(得分:2)

你需要在scrollviewer上加一个maxwidth吗?否则宽度默认为auto,maxwidth为无穷大

答案 1 :(得分:1)

如果删除

dg.Columns [2] .Width = new DataGridLength(1,DataGridLengthUnitType.Star);

问题应该消失。我可以问你为什么要让最后一列占据剩下的空间吗?该列实际上知道正确调整其大小以适合其单元格大小和列标题大小。

此外,如果您没有指定列的宽度,那么您实际上不需要滚动查看器来滚动并查看所有列。数据网格内置了一个滚动查看器,当屏幕外有列时,水平滚动条将会出现。

我希望这会有所帮助。 :)