c# - WPF Datagrid 列宽最大化时调整大小

标签 c# wpf xaml datagrid

我在网格列中添加了 WPF 数据网格,这里是 XAML

<DataGrid x:Name="grdProgramList" IsReadOnly="True" 
          Grid.Column="1" Grid.Row="1" 
          Width="{Binding Path=ActualWidth, ElementName=grid}"
          RenderOptions.ClearTypeHint="Enabled"
          TextOptions.TextFormattingMode="Display"
          HeadersVisibility="All"
          Margin="5"
          SelectionMode="Single"
          SelectionUnit="FullRow"
          SelectionChanged="AzureDataGrid_Selected"
          ItemsSource="{Binding Path=Uninstaller.ProgramCollection}"
          SelectedItem="{Binding Uninstaller.SelectedProgramDetails,  Mode=TwoWay}"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="PROGRAM NAME" 
                            Binding="{Binding ProgramDetails.ProgramName}" 
                            MinWidth="325" />
        <DataGridTextColumn Header="Publisher"
                            Binding="{Binding ProgramDetails.PublisherName}" />
        <DataGridTextColumn Header="Estimated Size (KB)"
                            Binding="{Binding ProgramDetails.EstimatedSize}" />
        <DataGridTextColumn Header="Version"
                            Binding="{Binding ProgramDetails.Version}" />
    </DataGrid.Columns>
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
            <Style.Triggers>
                <!-- IsSelected -->
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="#CC119EDA" />
                    <Setter Property="Foreground" Value="White" />
                    <Setter Property="BorderBrush" Value="#CC119EDA" />
                </MultiDataTrigger>
                <!-- IsHover -->
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="Background" Value="#66119EDA" />
                    <Setter Property="BorderBrush" Value="#66119EDA" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

当它调整大小时,我想适应所有列的宽度网格宽度

现在看起来像这样。

enter image description here

最佳答案

您应该设置DataGridColumnWidth 属性。它的类型为 DataGridLength ,它允许您按比例设置值。
您可以通过将值设置为 number 后跟 * 来实现此目的(例如 2** 默认值到1*)。
如果您希望每个具有相同的宽度,请将每个列设置为*:

<DataGrid.Columns>
    <DataGridTextColumn Header="PROGRAM NAME" 
                        Binding="{Binding ProgramDetails.ProgramName}" 
                        MinWidth="325" Width="*" />
    <DataGridTextColumn Header="Publisher"
                        Binding="{Binding ProgramDetails.PublisherName}" Width="*" />
    <DataGridTextColumn Header="Estimated Size (KB)"
                        Binding="{Binding ProgramDetails.EstimatedSize}"  Width="*"/>
    <DataGridTextColumn Header="Version"
                        Binding="{Binding ProgramDetails.Version}" Width="*" />
</DataGrid.Columns>

如果您只想最后一列占用剩余空间,请仅设置最后一列的宽度:

 <DataGrid.Columns>
    <DataGridTextColumn Header="PROGRAM NAME" 
                        Binding="{Binding ProgramDetails.ProgramName}" 
                        MinWidth="325" />
    <DataGridTextColumn Header="Publisher"
                        Binding="{Binding ProgramDetails.PublisherName}" />
    <DataGridTextColumn Header="Estimated Size (KB)"
                        Binding="{Binding ProgramDetails.EstimatedSize}" />
    <DataGridTextColumn Header="Version"
                        Binding="{Binding ProgramDetails.Version}" Width="*" />
</DataGrid.Columns>

关于c# - WPF Datagrid 列宽最大化时调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33315121/

相关文章:

wpf - 删除 WPF 中 ListView 上的鼠标悬停效果

c# - 如何使用动态列旋转普通 SQL 查询

c# - 函数模板和委托(delegate)有什么区别?

c# - 实现 IMultiValueConverter 以在单位之间进行转换

c# - 绑定(bind)到属性

wpf - 如何将索引属性绑定(bind)到 WPF 中的控件

用于将资源包含为 xml 元素而不是属性的 WPF XAML 语法

c# - 引用 DLL、编译、DLL 版本控制

c# - C# 查询中的多线程

c# - 将整数写入 OPC UA 服务器 - “not of the same type” 错误