в wpf как сделать так, чтобы датагрид соответствовал высоте окна - PullRequest
17 голосов
/ 13 июля 2011

У меня есть сетка с 3 столбцами и 2 строками

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="10"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

Я в нижней левой ячейке, у меня есть сетка данных, с AutoGenerateColumns = True, которая может загружать много строк.Я хочу, чтобы высота сетки данных была максимально увеличена, чтобы соответствовать размеру окна, и чтобы пользователь мог использовать полосу прокрутки сетки данных для прокрутки строк вверх и вниз.

Что происходит, когда сетка данныхпотоки в нижней части окна, и даже если я установлю

ScrollViewer.VerticalScrollBarVisibility="Visible"

сетки данных, полоса прокрутки не будет работать, и строки будут направлены вниз.Каким-то образом сетка данных не чувствует себя ограниченной ...

Что делать?

Ответы [ 3 ]

38 голосов
/ 13 июля 2011

Попробуйте установить значения HorizontalAlignment=Stretch и VerticalScrollBarVisibility=Auto

в вашей DataGrid. Если это не сработает, вам также может понадобиться привязать высоту сетки к высоте окна, чтобы она автоматически не увеличивалась досоответствовать его содержанию.Обычно я использую Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualHeight}" (это может быть RenderSize.ActualHeight вместо просто ActualHeight ... Я забыл.

Другой альтернативой является использование DockPanel вместо Grid, так как этот элемент управления нене будет автоматически расти, чтобы соответствовать его содержимому. Вместо этого он растянет своего последнего потомка, чтобы заполнить оставшееся пространство.

1 голос
/ 11 марта 2019

У меня была та же проблема, но привязка к высоте окна не полностью решила эту проблему для меня.В моем случае DataGrid все еще расширялся на 2 - 3 дюйма ниже видимой области окна.Я полагаю, что это произошло потому, что моя DataGrid начиналась на 2–3 дюйма ниже верхней части окна.

В конце концов я обнаружил, что нет необходимости связывать высоту DataGrid вообще.Все, что мне нужно было сделать, это изменить прямой контейнер DataGrid.

Для меня следующая настройка XAML заставляет DataGrid расширяться за пределы размера окна, когда добавляется достаточное количество строк.Обратите внимание, что DataGrid находится внутри StackPanel.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="75"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
       <!-- StackPanel Content accounting for about 2-3 inches of space -->
    </StackPanel>
    <!-- DataGrid within a StackPanel extends past the vertical space of the Window
     and does not display vertical scroll bars.  Even if I bind the height to Window 
     height the DataGrid content still extends 2-3 inches past the viewable Window area-->
    <StackPanel Grid.Row="1">
    <DataGrid ItemsSource="{StaticResource ImportedTransactionList}" 
         Margin="10,20,10,10" MinHeight="100">
    </DataGrid>
    </StackPanel>
</Grid>

Однако простое удаление StackPanel устранило проблему для меня.

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="75"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="0">
       <!-- StackPanel Content accounting for about 2-3 inches of space -->
    </StackPanel>
    <!-- Removing the StackPanel fixes the issue-->
    <DataGrid Grid.Row="1" ItemsSource="{StaticResource SomeStaticResource}" 
           Margin="10,20,10,10" MinHeight="100">
    </DataGrid>
</Grid>

Поскольку оригинальный пост довольно старый, я должен отметить, что я использую VS2017 и .Net Framework 4.6.1, но я не уверен, имеет ли это какое-либо отношение.

1 голос
/ 13 июля 2011

Вы должны определить столбец и строку, где DataGrid находится с *. Вы говорите, что это в нижней левой ячейке. Строка в порядке, но ваш столбец там Width="Auto".

AutoGenerateColumns=True дает беспорядок, если Width="Auto".

...