如何在 C# 中根据 Window 宽度调整 DataGrid 列的宽度?
HowTo Resize DataGrid Columns Width Based On Window Width in C#?
我有以下 DataGrid,我希望其中的列大小自动拉伸,以便完整的 window 大小用于所有现有列。实际上我的五列的宽度是最小尺寸。这意味着我的 window 大小为 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="*" ... />
这是一个相对大小,如果所有列都设置为 *,那么它们相对于父级的大小都相等 window。
您可以更进一步,在 * 前加上一个数字,例如:
<DataGridTextColumn Width="1*" ... />
<DataGridTextColumn Width="2*" ... />
在这种情况下,第二列将占第一列的两倍 space。
我有以下 DataGrid,我希望其中的列大小自动拉伸,以便完整的 window 大小用于所有现有列。实际上我的五列的宽度是最小尺寸。这意味着我的 window 大小为 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="*" ... />
这是一个相对大小,如果所有列都设置为 *,那么它们相对于父级的大小都相等 window。
您可以更进一步,在 * 前加上一个数字,例如:
<DataGridTextColumn Width="1*" ... />
<DataGridTextColumn Width="2*" ... />
在这种情况下,第二列将占第一列的两倍 space。