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>
Ответы
Ответ 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"
-
Вы должны настроить динамическую динамику Высота для родителя 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>