如何在WPF DataGrid中以固定高度显示可编辑文本列内的垂直滚动条

时间:2014-08-20 21:15:37

标签: c# wpf mvvm

我有一个可编辑的WPF DataGrid绑定到DataTable,并且使用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 个答案:

答案 0 :(得分:0)

最后,我能够使用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>

感谢。