Метод разрешения прокрутки содержимого RowDetail в WPF DataGrid - PullRequest
7 голосов
/ 15 ноября 2010

У меня есть сетка данных, которая отображает элементы с двумя столбцами данных текстовой строки и более крупную деталь свободного текста, которую я отображаю с помощью шаблона 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 Ответ

9 голосов
/ 15 ноября 2010

Один из способов добавить ScrollViewer для RowDetails - указать MaxHeight для RowDetails, например:

<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>
...