DataGrid со звездочкой изменяет размер всей DataGrid - PullRequest
1 голос
/ 16 сентября 2011

У меня есть WPF DataGrid с двумя столбцами; Я хочу, чтобы второй столбец автоматически подгонял сетку, поэтому я установил ее ширину на «*». Однако во время выполнения DataGrid изменяет размеры до смешной ширины.

Вот моя основная разметка с удаленными (я думаю) посторонними элементами управления и атрибутами:

<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid>
            <StackPanel>
                <DataGrid Name="MyGrid" AutoGenerateColumns="False"
                          CanUserAddRows="False" CanUserReorderColumns="False"
                          CanUserResizeColumns="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
                        <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </StackPanel>
        </Grid>
    </ScrollViewer>
</Grid>

Я подозреваю, что проблема заключается в том, что DataGrid находится в ScrollViewer. Я попытался установить ширину ScrollViewer на ширину DataGrid:

Width="{Bidning ElementName=MyGrid, Path=ActualWidth}"

как предложено в этом посте , но не повезло. Я также попытался установить для параметра HorizontalScrollBarVisibility значение Отключено, но затем все исчезает (серьезно).

Я должен также упомянуть, что все это находится в UserControl, который находится в другом UserControl, который затем находится в Window, который, вероятно, как-то связан со всем, что «исчезает» (я подозреваю, что ширина сходит с ума, и все «с окно ").

1 Ответ

1 голос
/ 12 июля 2012

Попробуйте удалить все до DataGrid, упрощая макет. DataGrid уже содержит ScrollViewer, встроенный в его шаблон по умолчанию. Кроме того, используя StackPanel, вы позволяете его дочерним элементам заполнять все доступное пространство - StackPanel растягивается в соответствии с размером его содержимого. Таким образом, ваш DataGrid растягивается до бесконечности.

Я также изменил свойство Name в DataGrid на x: Name, и вот почему: В чем разница между атрибутами x: Name и Name в WPF?

<DataGrid 
    x:Name="MyGrid" 
    AutoGenerateColumns="False" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False"
    CanUserResizeColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
        <DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
    </DataGrid.Columns>
</DataGrid>
...