如何在C#中基于窗口宽度调整数据网格列宽
本文关键字:调整 数据 网格 数据网 窗口 于窗口 | 更新日期: 2024-10-22 12:56:20
我有以下DataGrid,我希望在其中自动拉伸列大小,以便将整个窗口大小用于所有现有列。实际上,我的五列的宽度是最小的。这意味着我有一个640像素的窗口大小,其中五列填充360像素。
<DataGrid Name="dgPerson" ItemsSource="{Binding PersonObject}" AutoGenerateColumns="False" CanUserAddRows="false">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" IsReadOnly="True" />
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" IsReadOnly="True" />
<DataGridTextColumn Header="Email" Binding="{Binding Email}" />
<DataGridTextColumn Header="Facebook" Binding="{Binding Facebook}" />
<DataGridTemplateColumn Header="Action">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Click="btnEditPerson_Click">
<StackPanel Orientation="Horizontal">
<Rectangle Width="12" Height="12"
Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{StaticResource appbar_refresh}" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
<Button Click="btnDeletePerson_Click">
<StackPanel Orientation="Horizontal">
<Rectangle Width="12" Height="12"
Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill"
Visual="{StaticResource appbar_delete}" />
</Rectangle.OpacityMask>
</Rectangle>
</StackPanel>
</Button>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
您可以将所有DataGridTextColumn的宽度设置为"*"
<DataGridTextColumn Width="*" ... />
这是一个相对大小,如果所有列都设置为*,那么它们相对于父窗口的大小都相等。
您可以更进一步,在*前面加一个数字,例如:
<DataGridTextColumn Width="1*" ... />
<DataGridTextColumn Width="2*" ... />
在这种情况下,第二列占用的空间是第一列的两倍。