Прокрутка DataGrid - PullRequest
       32

Прокрутка DataGrid

0 голосов
/ 08 октября 2019

Я использую DataGrid со специальной прокруткой, которую я ищу в интернете. Работает нормально, но когда я изменяю selecteditem для обратного кода, выбор строки переходит к выбранной строке, но Scroll остается на 1-м элементе, так что я не вижу 20-й элемент, если я иду к последней с моей кнопкой. В коде я использовал первую, предыдущую, следующую, последнюю кнопки, перемещение поискового индекса - но они не взаимодействуют со Scroll. Почему? Это моя навигация:

Если я Key.Up, Key.Down, которые хорошо взаимодействуют с прокруткой, но когда я перехожу с 1-го на 20-е, я отправляю 19XKey.Down? Я думаю, может быть, легкий путь, просто я не понимаю. Теперь мои кнопки устанавливают Mvvm light CollectionViewsource AktItem на следующий, последний и т. Д., И, благодаря SelectedItem, IssynchtonizedCurrent возвращают фокус, но прокрутка не перемещается.

Спасибо всем, помогает Стив

<ControlTemplate TargetType="{x:Type DataGrid}" x:Key="DataGridWithNavigation">

        <Border BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" 
                                    Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">

            <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
                <ScrollViewer.Template>                    
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                        <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" 
                                Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"                        
                                                        Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
                                                        Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                        <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"
                                                                                Grid.Column="1" 
                                                                                Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                            <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" 
                                                                        CanContentScroll="{TemplateBinding CanContentScroll}" 
                                                                        Grid.ColumnSpan="2" Grid.Row="1"/>
                            <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" 
                                                           Maximum="{TemplateBinding ScrollableHeight}" 
                                                           Orientation="Vertical" Grid.Row="1" 
                                                           Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" 
                                         Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"

                                                           ViewportSize="{TemplateBinding ViewportHeight}"/><!--Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"-->
                        <Grid Grid.Column="1" Grid.Row="2">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>

                                <view:BindingNavigatorAreaScroll x:Name="BNA_Scroll" Grid.Column="1"/>
                                <ScrollBar x:Name="PART_HorizontalScrollBar" 
                                                   Grid.Column="2" 
                                                   Maximum="{TemplateBinding ScrollableWidth}" 
                                                   Orientation="Horizontal" 
                                                    Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                                   Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" 
                                                   ViewportSize="{TemplateBinding ViewportWidth}"
                                                  />
                                <!-- Template="{StaticResource yourCustomTemplate}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"-->
                                <!--<TextBlock  Text="{TemplateBinding ComputedVerticalScrollBarVisibility}"   Grid.Column="2"/>-->
                            </Grid>
                        </Grid>
                    </ControlTemplate>
                </ScrollViewer.Template>
                <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
            </ScrollViewer>
        </Border>
    </ControlTemplate>

1 Ответ

0 голосов
/ 08 октября 2019

Вероятно, самый простой способ добиться того, что вы хотите, - это ответить на событие нажатия кнопки в коде вашего представления, используя метод DataGrid.ScrollIntoView(object):

В XAML:

<Button Content="Content"
        Click="Button_Click"/>

В CodeBehind:

 private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            DG.ScrollIntoView(DG.Items[item]);
        }

Где Dg - это Name сетки данных, которую вы указываете в своем XAML, а item - это элемент, к которому вы хотите перейти.

...