C# WPF datagrid行高不会超过datagrid高度

问题描述 投票:0回答:1

在 C#、WPF 和 Visual Studio 中,我在数据网格中显示来自 sql 数据库的一些数据,在描述列中可能有很多行,目前它会截断行的显示而不是添加滚动。当有多行时,它仍然会在父数据网格高度的最大值处截断每行。 problem shown here

下面是我到目前为止所尝试过的(这就是为什么屏幕截图显示了 2 个描述列)。将滚动查看器添加到数据模板会使滚动条显示为灰色,但没有其他内容。

          <DataGrid  VerticalAlignment="Top"  MaxHeight="225" Height="225" SelectionUnit="FullRow" MouseDoubleClick="Loaditem" AutoGenerateColumns="False" IsReadOnly="True" x:Name="grid" Margin="7,510,33,0"  >
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Description" Width="100">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True">
                                <TextBlock 
                                  Text="{Binding Description}" 
                                    HorizontalAlignment="Stretch"
                                    VerticalAlignment="Stretch"
                                     TextWrapping="Wrap"
                                    Height="10000"
                                    MinHeight="10000"
                                    MaxHeight="10000"
                                     />
                                </ScrollViewer>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
                
                
                <DataGrid.CommandBindings>
                        <CommandBinding Command="Copy" Executed="CopyCommand" />
                    </DataGrid.CommandBindings>

                    <!-- This is required to handle CTRL + C when something is selected in the DataGrid -->
                    <DataGrid.InputBindings>
                        <KeyBinding Key="C" Modifiers="Control" Command="Copy" />
                    </DataGrid.InputBindings>
                    <DataGrid.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Copy" Command="Copy" />
                        </ContextMenu>
                    </DataGrid.ContextMenu>
                </DataGrid>

我当前在代码后面添加其他列的位置

         grid.Columns.Add(new DataGridTextColumn() { Header = "QTY", Width = new DataGridLength(0.025, DataGridLengthUnitType.Star), Binding = new System.Windows.Data.Binding("Qty") });

            grid.Columns.Add(new DataGridTextColumn() { Header = "Description", Width = new DataGridLength(0.49, DataGridLengthUnitType.Star), Binding = new System.Windows.Data.Binding("Description") });
            grid.Columns.Add(new DataGridTextColumn() { Header = "Part Number", Width = new DataGridLength(0.1, DataGridLengthUnitType.Star), Binding = new System.Windows.Data.Binding("PartNo")  });
            grid.Columns.Add(new DataGridTextColumn() { Header = "Cost", Width = new DataGridLength(0.085, DataGridLengthUnitType.Star), Binding = new System.Windows.Data.Binding("Cost") { StringFormat = "$0.00" } });
c# wpf datagrid scrollviewer
1个回答
0
投票

核心问题是您正在设置 TextBox 的高度,而不是 ScrollViewer。因此,在这种情况下,ScrollViewer 会随着内容而增长。

如果您将 Height/MaxHeight 属性移动到 ScrollViewer,这应该可以工作:

<DataTemplate>
    <ScrollViewer VerticalScrollBarVisibility="Auto"
                    ScrollViewer.CanContentScroll="False"
                    MaxHeight="100"
                    >
        <TextBlock Text="{Binding Description}"
                    HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    TextWrapping="Wrap"
                    />
    </ScrollViewer>
</DataTemplate>

生成的可滚动单元格:

© www.soinside.com 2019 - 2024. All rights reserved.