WPF Datagrid - 未显示任何滚动条

时间:2014-06-03 13:00:36

标签: c# wpf datagrid scrollbar

我的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>

5 个答案:

答案 0 :(得分:21)

总结评论你的控件看起来很好,这表明问题出现在可视树的某个地方。最有可能InventoryList或其父母之一被置于控制之中,为其子女带来无限的空间增长,如StackPanelScrollViewerCanvas 。因为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的高度,则滚动条可见。

enter image description here

答案 2 :(得分:4)

在datagrid中设置属性

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

答案 3 :(得分:2)

这是最好的答案,我会告诉你原因。

  1. 您必须使用DataGrid的特殊属性 ScrollViewer
  2. ScrollViewer.CanContentScroll="True" 
    ScrollViewer.VerticalScrollBarVisibility="Auto"
    ScrollViewer.HorizontalScrollBarVisibility="Auto"
    
    1. 您必须将高度调整为 DataGrid 的父级。

      高度=&#34; {Binding ElementName = parentElementName,Path = ActualHeight}&#34;

    2. 这是我的代码的实例。

       <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>

它对我有用。