Scrollviewer Проблема wpf - PullRequest
       22

Scrollviewer Проблема wpf

2 голосов
/ 06 июля 2010

Я отображаю изображения внутри списка.Я поместил этот список внутри прокрутки.Я использую две кнопки повтора для перемещения элементов списка.Я связываю список с помощью datacontext.

Проблема:

Если я перемещаю изображения с помощью кнопки и нажимаю на изображение в списке, оно перемещается в исходное положение.

Код:

   <RepeatButton Click="rbtnLeft_Click" Name="rbtnLeft" Width="30" Height="30">
                <Image Source="Images/GeneralImages/search_right_arrow.jpg"></Image>
            </RepeatButton>
            <Grid  x:Name="grid"  Width="666" HorizontalAlignment="Left">
                <ScrollViewer Grid.Row="1" Name="svGame"
                VerticalScrollBarVisibility="Hidden" 
                HorizontalScrollBarVisibility="Hidden"  >
                    <ListBox ClipToBounds="True" Name="lbGameImage" Width="Auto" SelectionChanged="lbGameImage_SelectionChanged" ItemsSource="{Binding}"   ItemsPanel="{DynamicResource iptListBox}" ItemContainerStyle="{DynamicResource ListBoxItemStyle}"
              ScrollViewer.VerticalScrollBarVisibility="Hidden" 
              ScrollViewer.HorizontalScrollBarVisibility="Hidden"/>
                </ScrollViewer>                                       
            </Grid>
            <RepeatButton Click="rbtnRight_Click" Name="rbtnRight" Width="30" Height="30">
                <Image Source="Images/GeneralImages/search_left_arrow.jpg"></Image>
            </RepeatButton>

c # Код:

private void rbtnLeft_Click(object sender, RoutedEventArgs e)
    {
        svGame.ScrollToHorizontalOffset(svGame.HorizontalOffset + 5);
    }

    private void rbtnRight_Click(object sender, RoutedEventArgs e)
    {
        svGame.ScrollToHorizontalOffset(svGame.HorizontalOffset - 5);
    }

Ответы [ 2 ]

5 голосов
/ 06 июля 2010

Проблема в том, что ListBox считает, что он владеет ScrollViewer, поэтому всякий раз, когда выбор изменяется, он устанавливает смещение обратно на то, что ему нужно.Установите ScrollViewer.CanContentScroll="False" в ListBox, чтобы предотвратить это.

1 голос
/ 06 июля 2010

Вам необходимо отключить внутренний ScrollViewer внутри ListBox.Вы можете сделать это, повторно изменив шаблон lbGameImage, чтобы полностью удалить ScrollViewer, но более быстрый способ (который, похоже, вы пытались сделать) состоит в том, чтобы установить оба параметра ScrollBarVisibility на lbGameImage в значение «Отключено».Скрытый означает, что они все еще активны и прокручивают контент, вы просто не можете их видеть.

...