在 C#、WPF 和 Visual Studio 中,我在数据网格中显示来自 sql 数据库的一些数据,在描述列中可能有很多行,目前它会截断行的显示而不是添加滚动。当有多行时,它仍然会在父数据网格高度的最大值处截断每行。
下面是我到目前为止所尝试过的(这就是为什么屏幕截图显示了 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" } });
核心问题是您正在设置 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>