WPF Datagrid - 未显示任何滚动条

Eri*_*dke 15 c# wpf datagrid scrollbar

我的Datagrid对ObservableCollection有一个绑定,并在对EF提取的一些值进行分组后得到填充.

我的问题是,datagrid-height超出了窗口大小.有谁知道如何解决这个问题...我几乎用谷歌搜索死了......: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>
Run Code Online (Sandbox Code Playgroud)

dko*_*ozl 21

总结评论你的控件看起来很好,这表明问题是在可视树的某个地方.最有可能的InventoryList,或者它的一个父母,它被置于控制之下,给予孩子无限的空间来成长StackPanel,ScrollViewer或者Canvas.因此DataGrid可以增长以容纳所有项目因此不可见滚动条.

删除该控件或将其替换为限制其子项大小的控件

  • 就我而言,我的网格位于 UserControl 中,托管在高度=“auto”的网格行中的 ContentControl 中。(应该是高度=“*”。) (2认同)

Dha*_*tel 6

您可以使用滚动查看器

  <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>
Run Code Online (Sandbox Code Playgroud)

如果我定义了 Datagrid 的高度,则滚动条可见。

在此处输入图片说明


Dhr*_*oni 6

在数据网格中设置属性

<DataGrid AutoGenerateColumns="False" Grid.Column="0" Grid.Row="0"
      ScrollViewer.CanContentScroll="True" 
      ScrollViewer.VerticalScrollBarVisibility="Auto"
      ScrollViewer.HorizontalScrollBarVisibility="Auto">
</DataGrid>
Run Code Online (Sandbox Code Playgroud)


Dev*_*per 6

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

  1. 您必须使用 DataGrid 的特殊属性ScrollViewer
ScrollViewer.CanContentScroll="True" 
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
Run Code Online (Sandbox Code Playgroud)
  1. 您必须动态地将高度调整为DataGrid的父级。

    高度=“{绑定元素名称=父元素名称,路径=实际高度}”

这是我的代码的工作示例。

 <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>
Run Code Online (Sandbox Code Playgroud)