DataGrid的列宽(width ="*")未"刷新"

ch4*_*40s 2 wpf xaml datagrid

我得到了以下代码,它包含一个DataGrid,它列出了项目,同时反映了ListBox中的选定项目.一切正常,但DataGrid列的宽度很奇怪.我将"name"列的宽度设置为星号,以便"wert"列获取其内容所需的空间,"name"列获取其余内容.这是有效的,但有一点问题.当应用程序启动时,所有列都处于其最小宽度,并且只选择ListBox中的另一个项目将列的宽度更新为所需的值("name"为星形,"wert"为auto).我尝试在应用程序加载时使用datagrid的UpdateLayout方法,但这没有帮助.

此外,我正在使用扩展器,并且当所有扩展器都关闭时,我必须首先展开其中一个项目,然后在列表框中加载另一个项目以使宽度正确.

有谁能请我指出正确的方向?:)

更新:初始问题已解决,但还有一个小问题:列不再崩溃,但它们也没有达到所需的大小.它们的大小适合其标题名称,而不是行内容.这仅在默认情况下关闭扩展器时发生.当我将扩展器设置为展开时,根据需要将所有列设置为其内容宽度.

这是使用过的代码:

<Grid.DataContext>
            <XmlDataProvider x:Name="XmlData" Source="entries.xml" XPath="Root/Person" />
</Grid.DataContext>

<ListBox Name="PersonListBox"
                ItemsSource="{Binding}"
                ItemTemplate="{StaticResource listBoxTemplate}"
                IsSynchronizedWithCurrentItem="True"
                Visibility="Visible" SelectionMode="Single"  SelectedIndex="-1" DataContext="{Binding}">
            </ListBox>

<DataGrid IsSynchronizedWithCurrentItem="True" Name="itemGrid"
                 DataContext="{Binding ElementName=PersonListBox, Path=SelectedItem}" 
                 CanUserResizeColumns="False"
                 CanUserResizeRows="False"
                 IsReadOnly="true"
                 Background="White"
                 HorizontalScrollBarVisibility="Hidden"
                 AutoGenerateColumns="False">
                <DataGrid.Resources>
                    <CollectionViewSource x:Key="items" Source="{Binding XPath=item}">
                        <CollectionViewSource.GroupDescriptions>
                            <PropertyGroupDescription PropertyName="@name"/> 
                        </CollectionViewSource.GroupDescriptions>
                    </CollectionViewSource>
                </DataGrid.Resources>
                <DataGrid.ItemsSource>
                    <Binding Source="{StaticResource items}"/>
                </DataGrid.ItemsSource>
                <DataGrid.Columns>
                    <DataGridTextColumn Width="*" Header="Name" Binding="{Binding XPath=@name}"/>
                    <DataGridTextColumn Header="Wert" Binding="{Binding XPath=@value, Converter={StaticResource sumConverter}}}"/>
                </DataGrid.Columns>
                <DataGrid.GroupStyle>
                   <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander >
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Path=Name}" />
                                                    <TextBlock Text="{Binding Path=Items, Converter={StaticResource sumConverter}}" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
                </DataGrid.GroupStyle>
            </DataGrid>
Run Code Online (Sandbox Code Playgroud)

phi*_*252 13

我发现这篇帖子让我得到答案.总之,默认GroupStyle.Panel(StackPanel)不能适合DataGrid宽度"*",因此列会崩溃.只需添加

<GroupStyle.Panel>
    <ItemsPanelTemplate>
        <DataGridRowsPresenter/>
    </ItemsPanelTemplate>               
</GroupStyle.Panel>
Run Code Online (Sandbox Code Playgroud)

对你GroupStyle而且你应该是好的.