无法使用滚轮滚动
本文关键字:滚动 | 更新日期: 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>