Заголовки столбцов сетки данных WPF, сжатые до установки ItemSource

#wpf #datagrid

#wpf #datagrid

Вопрос:

В настоящее время у меня есть datagrid в WPF только с двумя столбцами, и его источник элемента задается в кодах .cs при попытке привязать его к конкретному источнику элемента, но изначально он не ссылается ни на один itemsource. Проблема в том, что если источника элемента еще нет, столбцы сжимаются, даже если я указал ширину столбцов. (на прилагаемом рисунке)введите описание изображения здесь

Столбцы выглядят нормально, пока я не добавил часть <datagrid.groupstyle> , могу я спросить, не упустил ли я что-то или я делаю что-то неправильно. Ниже приведены коды внутри my .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>
  

Ответ №1:

Установите <GroupStyle.Panel> для элемента значение an ItemsPanelTemplate с DataGridRowsPresenter :

 <DataGrid.GroupStyle>
    <GroupStyle>
        <GroupStyle.Panel>
            <ItemsPanelTemplate>
                <DataGridRowsPresenter/>
            </ItemsPanelTemplate>
        </GroupStyle.Panel>

        <GroupStyle.HeaderTemplate>
            ...
        </GroupStyle.HeaderTemplate>

        <GroupStyle.ContainerStyle>
            ...
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</DataGrid.GroupStyle>