【问题标题】:Can not scroll with scrollwheel无法使用滚轮滚动
【发布时间】:2013-09-18 12:15:42
【问题描述】:

我的滚动查看器有问题。

首先这是我的代码:

  <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。所有项目都正确显示。我只想上下滚动,这很好用。

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

这里有什么问题?

【问题讨论】:

  • 你的WrapPanelOrientation="Horizontal",你的意思是要垂直吗?除非高度变得小于项目的大小,否则只会以这种方式进行水平滚动,而不是“向上或向下”。
  • 另外,如果我设置 Oriantation="Vertical" 我不能用鼠标滚轮滚动。
  • 我不确定你是否需要额外的ScrollViewer。您是否尝试过简单地删除它? ListView 已经内置了 ScrollViewer,其中水平和垂直滚动可见性通常设置为Auto。即,如果您只是删除 ScrollViewer,鼠标滚轮滚动应该可以正常工作。

标签: c# wpf scrollview


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 您的第一个解决方案有效。但前提是我将 'ScrollViewer.Horizo​​ntalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="False"' 添加到 scrollviewer 的定义中
猜你喜欢
  • 2016-05-15
  • 2021-05-18
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多