在设置 ItemSource 之前压缩 WPF DataGrid 列 headers
WPF DataGrid column headers squeezed before ItemSource is set
我目前在 WPF 中有一个只有两列的数据网格,当我试图将它绑定到它的特定项目源时,它的项目源是在 .cs 代码中设置的,但最初它没有引用任何项目源。问题是,如果还没有项目源,即使我指定了列的宽度,列也会被挤压。 (在附图中)
在我添加 部分之前,这些列看起来很好,请问我是否遗漏了什么或者我做错了什么。
下面是我的 .xaml 中用于此数据网格的代码。
<DataGrid Visibility="Visible"
x:Name="IFCInfoDataGrid" Width="auto" Height="auto" HeadersVisibility="Column"
AutoGenerateColumns="False" Margin="12" IsReadOnly="True" Grid.ColumnSpan="2"
SelectionUnit="FullRow" IsSynchronizedWithCurrentItem="False" >
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</DataGrid.CellStyle>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<DockPanel Background="LightBlue">
<TextBlock Text="{Binding Path=Name}" Foreground="Blue" Margin="30,0,0,0" Width="100" />
</DockPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}" >
<Setter Property="Margin" Value="0,0,0,5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander
BorderBrush="#FF002255"
IsExpanded="True"
Background="Tan"
BorderThickness="0,0,0,1">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="{Binding Path=Name}" Width="200" />
</StackPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding IFCParameter}" Header="IFC Parameter" Width="0.5*"
ElementStyle="{StaticResource DataGridRowStyle}" IsReadOnly="True" CanUserSort="False"/>
<DataGridTextColumn Binding="{Binding ParameterValue}" Header="Value" Width="0.5*"
ElementStyle="{StaticResource DataGridRowStyle}" IsReadOnly="True" CanUserSort="False"/>
</DataGrid.Columns>
</DataGrid>
将 <GroupStyle.Panel>
元素设置为带有 DataGridRowsPresenter
的 ItemsPanelTemplate
:
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.HeaderTemplate>
...
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
...
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
我目前在 WPF 中有一个只有两列的数据网格,当我试图将它绑定到它的特定项目源时,它的项目源是在 .cs 代码中设置的,但最初它没有引用任何项目源。问题是,如果还没有项目源,即使我指定了列的宽度,列也会被挤压。 (在附图中)
在我添加
<DataGrid Visibility="Visible"
x:Name="IFCInfoDataGrid" Width="auto" Height="auto" HeadersVisibility="Column"
AutoGenerateColumns="False" Margin="12" IsReadOnly="True" Grid.ColumnSpan="2"
SelectionUnit="FullRow" IsSynchronizedWithCurrentItem="False" >
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</DataGrid.CellStyle>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<DockPanel Background="LightBlue">
<TextBlock Text="{Binding Path=Name}" Foreground="Blue" Margin="30,0,0,0" Width="100" />
</DockPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}" >
<Setter Property="Margin" Value="0,0,0,5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander
BorderBrush="#FF002255"
IsExpanded="True"
Background="Tan"
BorderThickness="0,0,0,1">
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="{Binding Path=Name}" Width="200" />
</StackPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter />
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding IFCParameter}" Header="IFC Parameter" Width="0.5*"
ElementStyle="{StaticResource DataGridRowStyle}" IsReadOnly="True" CanUserSort="False"/>
<DataGridTextColumn Binding="{Binding ParameterValue}" Header="Value" Width="0.5*"
ElementStyle="{StaticResource DataGridRowStyle}" IsReadOnly="True" CanUserSort="False"/>
</DataGrid.Columns>
</DataGrid>
将 <GroupStyle.Panel>
元素设置为带有 DataGridRowsPresenter
的 ItemsPanelTemplate
:
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<DataGridRowsPresenter/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
<GroupStyle.HeaderTemplate>
...
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
...
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>