C# 滚动查看器问题wpf

C# 滚动查看器问题wpf,c#,wpf,scrollviewer,horizontaloffset,C#,Wpf,Scrollviewer,Horizontaloffset,我正在列表框中显示图像。我已将此列表框放置在scrollviewer中。我使用两个重复按钮来移动列表框项目。我正在使用datacontext绑定列表框 问题: 如果我使用按钮移动图像并单击lisbox中的图像,它将移动到初始位置 代码: 问题是ListBox认为它拥有ScrollViewer,因此每当选择更改时,它都会将偏移量设置回它想要的值。在列表框中设置ScrollViewer.CanContentScroll=“False”,以防止出现这种情况 您需要关闭列表框内的内部ScrollView

我正在列表框中显示图像。我已将此列表框放置在scrollviewer中。我使用两个重复按钮来移动列表框项目。我正在使用datacontext绑定列表框

问题:

如果我使用按钮移动图像并单击lisbox中的图像,它将移动到初始位置

代码:


问题是ListBox认为它拥有ScrollViewer,因此每当选择更改时,它都会将偏移量设置回它想要的值。在列表框中设置ScrollViewer.CanContentScroll=“False”,以防止出现这种情况

您需要关闭列表框内的内部ScrollViewer。您可以通过重新设置lbGameImage模板来完全删除ScrollViewer,但更快的方法(看起来像您尝试过的那样)是将lbGameImage上的两个ScrollBarVisibility设置都设置为“禁用”。隐藏意味着它们仍然处于活动状态并滚动内容,而你就是看不到它们

   <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>
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);
    }