无法使用滚轮滚动

本文关键字:滚动 | 更新日期: 2023-09-27 18:31:59

我的滚动查看器有问题。

首先,这是我的代码:

  <GroupBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" Header="Pictures"
              Margin="5,2,2,2">
        <ScrollViewer Grid.Column="1" Grid.Row="1" VerticalScrollBarVisibility="Auto" Margin="2">
            <ListView ItemsSource="{Binding ImageBoxes, UpdateSourceTrigger=PropertyChanged}">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel Orientation="Horizontal" ScrollViewer.CanContentScroll="True"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Style.Resources>
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                        </Style.Resources>
                        <Setter Property="BorderBrush" Value="Orange"/>
                        <Setter Property="BorderThickness" Value="1"/>
                        <Setter Property="Margin" Value="2"/>
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Cursor" Value="Hand"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="BorderBrush" Value="Blue"/>
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>
        </ScrollViewer>
    </GroupBox>

列表视图的 ItemsSouce 绑定到模型中的 ObservableCollection。所有项目都正确显示。我只想上下滚动,这工作正常。

我的问题是,我只能通过使用光标向上或向下移动滚动条来滚动。 鼠标滚轮不起作用。我需要这个来工作。

这里有什么问题?

无法使用滚轮滚动

发生这种情况

是因为ListView已经有一个内置ScrollViewer。 并且当您将ListView包装在冗余ScrollViewer中时,所需的鼠标滚动会丢失。

我看到您有两个选项,第一个(最简单的)是从 XAML 中删除ScrollViewer

<GroupBox>
    <ListView>
        ...
    </ListView>
</GroupBox>

第二种选择似乎比第一种更复杂,但仍然解决了垂直鼠标滚轮滚动的问题,是覆盖 ListView 的ControlTemplate并指定不包含ScrollViewer的模板。这样,主 XAML 中的ScrollViewer将正常工作。

它与这里的答案类似。这将允许您将滚动查看器保留在模板和 XAML 之外(但我不清楚您需要这样做)。下面的 XAML 被缩写为仅显示相关位,例如,您可以通过右键单击 Visual Studio 设计器中的 ListView 和编辑模板(假设您使用的是相当新版本的 VS)来查看完整的默认列表视图样式:

<Style x:Key="ListViewStyle1" TargetType="{x:Type ListView}">
   ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
                <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="True">
                    <!-- REMOVE THE DEFAULT SCROLLVIEWER HERE BUT KEEP THE ITEMSPRESENTER... -->
                    <!-- <ScrollViewer Focusable="False" Padding="{TemplateBinding Padding}"> -->
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    <!-- </ScrollViewer>-->
                </Border>
                <ControlTemplate.Triggers>
                  ...
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后,主 XAML 结构可以保持不变。

<GroupBox>
    <ScrollViewer>
        <ListView Style="{StaticResource ListViewStyle1}" >
           ...
        </ListView>
    </ScrollViewer>
</GroupBox>