允许在WPF DataGrid中滚动RowDetail内容的方法

时间:2010-11-15 05:26:55

标签: wpf datagrid scroll rowdetails

我有一个数据网格,显示带有两列文本行数据的项目和一个更大的自由文本细节,我通过一个只带边框和文本块的rowdetails模板显示。

我遇到的问题是文本细节通常大于网格允许的区域。数据网格的默认滚动行为意味着当滚动跳转到下一个项目时,用户无法查看整个细节。如果我使用

解决此问题
ScrollViewer.CanContentScroll="False"

然后,当关闭虚拟化时,数据网格变得非常缓慢且行数很多。

我确实认为我可以通过将rowdetail包装在scrollviewer中来解决这个问题,但这不起作用,因为细节区域不限于渲染区域。

那么,有人可以提供一些有用的选择吗?我的WPF知识很少,所以如果有一些明显的方法可以解决这个问题,那就道歉了。

编辑:RowDetailsTemplate

<DataGrid.RowDetailsTemplate>
    <DataTemplate >
        <Border Background="Gray"
                Padding="5,5,5,5" CornerRadius="5">
            <TextBlock Background="Transparent" 
                       Foreground="White" 
                       TextWrapping="Wrap"
                       Text="{Binding Text}"/>
        </Border>
    </DataTemplate>
</DataGrid.RowDetailsTemplate>

1 个答案:

答案 0 :(得分:9)

为RowDetails添加ScrollViewer的一种方法是为RowDetails指定MaxHeight,如下所示

<DataGrid ...>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <Grid MaxHeight="75">
                <ScrollViewer>
                    <Border HorizontalAlignment="Stretch" CornerRadius="5" Background="Black" Margin="5" Padding="5">
                        <TextBlock Text="{Binding RowDetails}" Foreground="#509CD5" FontSize="20" Width="300" TextWrapping="Wrap"/>
                    </Border>
                </ScrollViewer>
            </Grid>                    
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
    <DataGrid.Columns>
    <!-- ... -->
</DataGrid>