1

我的滚动查看器有问题。

首先这是我的代码:

  <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>

ListView 的 ItemsSouce 绑定到模型中的 ObservableCollection。所有项目都正确显示。我只想上下滚动,这很好用。

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

这里有什么问题?

4

1 回答 1

2

发生这种情况是因为ListView已经有一个内置的ScrollViewer. 当您将 包装ListView在多余的ScrollViewer.

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

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

第二种选择似乎不必要地比第一种复杂,但仍然解决了垂直鼠标滚轮滚动的问题,它是覆盖 ListViewControlTemplate并指定一个不包含ScrollViewer. 这样,ScrollViewer您在主 XAML 中的内容就可以工作了。

它与此处的答案相似。这将允许您将滚动查看器保留在模板和 XAML 之外(但我不清楚您需要这样做)。下面的 XAML 被缩写为仅显示相关位,例如,您可以通过在 Visual Studio 设计器和编辑模板中右键单击 ListView 来查看完整的默认 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>
于 2013-09-21T16:12:42.783 回答