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

2 つのオプションがあります。最初の (最も簡単な)方法はScrollViewer、XAML から を削除することです。

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

最初のものよりも不必要に複雑に見えますが、それでもマウス ホイールの垂直方向のスクロールの問題を解決する 2 番目の方法は、ListView をオーバーライドしControlTemplateScrollViewer. このように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 に答える