【发布时间】:2014-10-14 09:23:58
【问题描述】:
我有一个绑定到 DataTable 的可编辑 WPF DataGrid,并使用 ADO.NET 逐页从 SQL Server 加载数据。有一些类型为 nvarchar(MAX) 的文本字段。因此用户应该能够在 DataGrid 中编辑和保存文本。所有这些都适用于普通的 DataGridTextColumns。但这对用户来说很不方便,因此我想在文本列中显示 2 行可见,并用垂直滚动条滚动剩余的行。
我尝试同时关注 DataGridTextColumn 和 DataGridTemplateColumn。
使用 DataGridTemplateColumn 它显示了我们想要的方式,但是在编辑时它没有出现在 DataSet 中发生了变化。 (这是在浏览页面时警告用户所必需的)因此它不会保存更改。
<DataGridTemplateColumn Header="Full Description" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="dgFullDescription"
Text="{Binding FullDescription, Mode=TwoWay}"
TextWrapping="WrapWithOverflow" Height="36"
VerticalScrollBarVisibility="Visible" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
另一方面,DataGridTextColumn 确实保存了更改,但无法显示滚动条。如果我设置了文字换行,那么如果它有更多的字符,它会显示超过 2 行,因此行高不一致。
<DataGridTextColumn Header="ShortDescription" Width="*"
Binding="{Binding ShortDescription, Mode=TwoWay}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
Value="Visible" />
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="HorizontalScrollBarVisibility"
Value="Visible" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
如何在 WPF DataGrid 中设置具有固定行高的可编辑文本列内的垂直滚动条?
【问题讨论】:
-
1) 你在设置高度吗? 2)我不确定元素如何对待它的内在孩子。你可以看看(这篇文章)[codeproject.com/Tips/659066/ListBox-and-Panels-in-WPF],特别是第二个例子,滚动条不会显示。它可能会给你一个提示。
-
@Noctis , 1). 设置高度确实限制了高度,但它不显示垂直滚动条。如果不进入编辑模式,用户将无法看到整个文本。
-
@Noctis,2) 链接对这个问题没有帮助。
-
很抱歉。我目前不在 WPF 项目面前,所以不能从内存中做很多事情。我相信其他人会提供帮助