【问题标题】:How to show vertical scroll bar inside editable Text Column with fixed height in WPF DataGrid如何在 WPF DataGrid 中具有固定高度的可编辑文本列内显示垂直滚动条
【发布时间】: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 项目面前,所以不能从内存中做很多事情。我相信其他人会提供帮助

标签: c# wpf mvvm


【解决方案1】:

最后我能够让它与 DataGridTemplateColumn 一起工作。垂直滚动条和固定高度都适用于它。感谢@Noctis 关于高度的建议。要使对 DataGridTemplateColumn 内的文本框所做的更改在 DataSet 更改中可用以进行更新,我必须添加 UpdateSourceTrigger=LostFocus 到文本绑定。最终代码如下:

<DataGridTemplateColumn Header="Full Description" Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
             <TextBox x:Name="dgFullDescription" 
                      Text="{Binding FullDescription, Mode=TwoWay, UpdateSourceTrigger=LostFocus }" 
                      TextWrapping="WrapWithOverflow" Height="36" 
                      VerticalScrollBarVisibility="Visible" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2012-12-05
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    相关资源
    最近更新 更多