Ширина столбца DataGrid (width = "*") не обновляется - PullRequest
1 голос
/ 25 октября 2011

Я получил следующий код, он состоит из DataGrid, в котором перечислены элементы, соответствующие выбранному элементу в ListBox.Все работает, но ширина столбцов DataGrid ведет себя странно.Я установил ширину столбца «name» в звездочку, чтобы столбец «wert» занимал пространство, необходимое для его содержимого, а столбец «name» занимал остальное.Это работает, но с небольшой проблемой.Когда приложение запускается, все столбцы имеют минимальную ширину, и только выбор другого элемента в ListBox обновляет ширину столбцов до нужных значений (звездочка для «имени», автоматическая для «wert»).Я пытался использовать метод 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>

1 Ответ

12 голосов
/ 25 октября 2011

Я нашел этот пост , который привел меня к ответу.Таким образом, значение по умолчанию GroupStyle.Panel (StackPanel) не может соответствовать ширине DataGrid "*", поэтому столбцы свернуты.Просто добавьте

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

к вашему GroupStyle, и все будет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...