Подтвердить что ты не робот

WPF Datagrid - Не показывать панель прокрутки

My Datagrid имеет привязку к ObservableCollection и заполняется после группировки некоторых значений, полученных EF.

Моя проблема в том, что высота datagrid превышает размер окна. Кто-нибудь знает, как это исправить... Я почти догадался до смерти..: o

<UserControl x:Class="UltranizerV2.Views.Storage.InventoryList"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>

            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="25"></RowDefinition>
        </Grid.RowDefinitions>


        <DockPanel  Grid.Row="0" >
            <DataGrid ItemsSource="{Binding PresentableInventoryItems}" VerticalAlignment="Stretch" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Produkttitel" Width="350" Binding="{ Binding ProductTitle}"/>
                <DataGridTextColumn Header="Sku" Width="100" Binding="{ Binding Sku}" />
                <DataGridTextColumn Header="Menge" Width="60"  Binding="{ Binding Quantity}" />
            </DataGrid.Columns>    
            </DataGrid>
        </DockPanel>
        <Label Grid.Row="1">Arsch</Label>
        </Grid>

</UserControl>
4b9b3361

Ответ 1

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

Удалите этот элемент управления или замените его на тот, который ограничивает размер его дочерних элементов

Ответ 2

вы можете использовать scrollviewer, например

  <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
    <DataGrid ItemsSource="{Binding PresentableInventoryItems}" VerticalAlignment="Stretch" AutoGenerateColumns="False" Height="500">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Produkttitel" Width="350" Binding="{ Binding ProductTitle}"/>
                <DataGridTextColumn Header="Sku" Width="100" Binding="{ Binding Sku}" />
                <DataGridTextColumn Header="Menge" Width="60"  Binding="{ Binding Quantity}" />
            </DataGrid.Columns>    
            </DataGrid>
</ScrollViewer>

Если я определяю высоту Datagrid, то видимая полоса прокрутки.

enter image description here

Ответ 3

Задайте свойство в datagrid

<DataGrid AutoGenerateColumns="False" Grid.Column="0" Grid.Row="0"
      ScrollViewer.CanContentScroll="True" 
      ScrollViewer.VerticalScrollBarVisibility="Auto"
      ScrollViewer.HorizontalScrollBarVisibility="Auto">
</DataGrid>

Ответ 4

Вот лучший ответ, и я расскажу вам, почему.

  • Вы должны использовать специальные свойства DataGrid: ScrollViewer
ScrollViewer.CanContentScroll="True" 
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
  1. Вы должны настроить динамическую динамику Высота для родителя DataGrid.

    Height = "{Binding ElementName = parentElementName, Path = ActualHeight}"

Это рабочий пример моего кода.

 <Grid x:Name="gridClientsContainer">
     <DataGrid  x:Name="dgClients"  IsReadOnly="True" CanUserAddRows="False" SelectionMode="Single"    VerticalAlignment="Top"        Margin="0 0 0 0" AutoGenerateColumns="False" ItemsSource="{Binding ClientItems}"  RowHeaderWidth="0"    ScrollViewer.CanContentScroll="True" 
      ScrollViewer.VerticalScrollBarVisibility="Auto" 
ScrollViewer.HorizontalScrollBarVisibility="Auto" Height="{Binding ElementName=gridClientsContainer, Path=ActualHeight}">
       <DataGrid.Columns>
          <DataGridTextColumn Binding="{Binding LastName}" Header="Last Name" MinWidth="120" />
          <DataGridTextColumn Binding="{Binding FirstName}" Header="First Name" MinWidth="100" />
     </DataGrid.Columns>
  </DataGrid>
</Grid>