我的Datagrid对ObservableCollection有一个绑定,并在对EF提取的一些值进行分组后得到填充。
我的问题是,datagrid-height超出了窗口大小。 有谁知道如何解决这个问题...我几乎用Google搜索了自己的死...:
<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>
答案 0 :(得分:21)
总结评论你的控件看起来很好,这表明问题出现在可视树的某个地方。最有可能InventoryList
或其父母之一被置于控制之中,为其子女带来无限的空间增长,如StackPanel
,ScrollViewer
或Canvas
。因为DataGrid
可以增长以容纳所有项目,因此不会显示滚动条。
删除该控件或将其替换为限制其子项大小的控件
答案 1 :(得分:4)
您可以像
一样使用滚动查看器 <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的高度,则滚动条可见。
答案 2 :(得分:4)
在datagrid中设置属性
<DataGrid AutoGenerateColumns="False" Grid.Column="0" Grid.Row="0"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
</DataGrid>
答案 3 :(得分:2)
这是最好的答案,我会告诉你原因。
ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"
您必须将高度调整为 DataGrid 的父级。
高度=&#34; {Binding ElementName = parentElementName,Path = ActualHeight}&#34;
这是我的代码的实例。
<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>
答案 4 :(得分:0)
放
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
它对我有用。