如何根据C#中的窗口宽度调整DataGrid列的宽度?

时间:2015-03-06 10:08:56

标签: c# wpf datagrid

我有以下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>

1 个答案:

答案 0 :(得分:1)

您可以将所有DataGridTextColumn上的宽度设置为&#34; *&#34;

<DataGridTextColumn Width="*" ... />

这是一个相对大小,如果所有列都设置为*,那么它们相对于父窗口的大小都相同。

您可以更进一步,在*前加上一个数字,例如:

<DataGridTextColumn Width="1*" ... />
<DataGridTextColumn Width="2*" ... />

在这种情况下,第二列占用的空间量是第一列的两倍。