【问题标题】:Silverlight - DataGrid in Scrollviewer, Column.Width="*" makes datagrid take several screen-widthsSilverlight - Scrollviewer 中的 DataGrid,Column.Width="*" 使 datagrid 采用多个屏幕宽度
【发布时间】:2011-08-04 20:43:22
【问题描述】:

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

edit:显然我不是唯一注意到这一点的人。 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; }
    }

【问题讨论】:

  • 为什么要把datagrid inscrollviwer?
  • 我正在开发一个大型应用程序,并且网格位于一个框架内,该框架位于一个滚动查看器的内部。在某些情况下(例如,如果您有很多实际占用空间的列)您希望滚动行为。这是一个可重复的样本。请放心,如果我有它在滚动查看器中,它需要在滚动查看器中,如果它不需要在滚动查看器中,我会删除它。

标签: silverlight silverlight-4.0 datagrid scrollviewer


【解决方案1】:

您需要在滚动查看器上设置一个最大宽度吗?否则 width 默认为 auto 且 maxwidth 为无穷大

【讨论】:

    【解决方案2】:

    如果你删除

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

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

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

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

    【讨论】:

    • 我的原始帖子指出这正是我正在寻求的行为。我希望我的最后一列占据剩余的空间。 1)我认为这应该是默认行为,否则你真的只是在浪费空间 2)在这种情况下,我的最后一列类似于错误/评论列,其中会有一条消息。所以删除它确实没有帮助,但感谢您的回复。
    • 你是说你的最后一栏很长,所以需要占用剩下的空间吗?
    • 我创建了一个示例项目并将其放入cid-f9ac8aa3f6afdcc3.office.live.com/self.aspx/Public/… 如果您发现它仍然无法满足您的需求,请点击它。
    • 我明白你在说什么,但这种行为与我试图完成的行为略有不同。在简单的意义上它是类似的,但实际上我试图将它与一个详细信息模板结合起来,它不会延伸到最后一列的末尾。为了保持一致性,我希望最后一列扩展到可用区域的末尾,而不管最后一列当前是否有任何长值。
    • 对不起,我的想法不多了... :(
    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 2017-02-01
    • 2010-10-28
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多