【问题标题】:Distribute columns evenly in WPF DataGrid在 WPF DataGrid 中均匀分布列
【发布时间】:2013-07-23 09:43:21
【问题描述】:

我将窗口设置为SizeToContent="WidthAndHeight",在我的窗口中有一行我想定义窗口宽度的控件。在这些控件下方,我想要一个包含三列的 DataGrid。

但是,我似乎无法平均分配三列,以使它们具有相同的大小并使用可用空间。有没有办法在 C#.NET 中做到这一点?

【问题讨论】:

  • 在 DataGridColumns 上设置 Width="*"
  • @NikitaBrizhak 当我这样做时,柱子刚刚从窗户射出!我认为是因为 SizeToContent 属性。
  • 这意味着,包含您的 DataGrid 的容器没有固定的宽度。
  • @NikitaBrizhak 我知道这一点,因为我需要 DataGrid 来填充窗口的宽度,窗口的大小取决于内容。我想知道是否有任何代码可以在加载窗口后使用调整列的大小,这样我就知道窗口的大小,然后我可以将其除以 3

标签: c# wpf datagrid


【解决方案1】:

您可以通过 DataBinding 来实现。例如:

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" SizeToContent="WidthAndHeight">
  <StackPanel Orientation="Vertical">
    <StackPanel Orientation="Horizontal" x:Name="panel">
        <Label Content="1" Width="90"/>
        <Label Content="2" Width="90"/>
        <Label Content="3" Width="90"/>
    </StackPanel>

    <DataGrid Width="{Binding ActualWidth, ElementName=panel}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="1" Width="*"/>
            <DataGridTextColumn Header="2" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>
  </StackPanel>
</Window>

【讨论】:

  • 谢谢,但它似乎不起作用。会不会是因为我没有指定面板中控件的宽度也绑定了宽度?
  • 没有。您可以编译此示例并从Labels 中删除Width="90"。它仍然可以工作。如果它对您不起作用,这意味着某些外部容器正在将 Width 设置为 *,或者第一行中的一个控件将 Width 设置为 *(或两者兼而有之) .如果您似乎无法找到它发生的确切位置,您可以使用 Snoop 来调试此问题。
  • @NikitaBrizhak- 如果外部容器的 Width 设置为 * 会发生什么?
  • @Andrew,我记得,DataGrid 将无限延伸。
猜你喜欢
  • 2016-03-20
  • 1970-01-01
  • 2018-05-18
  • 2011-04-04
  • 2011-11-30
  • 2011-06-23
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多