.net 带外部滚动条的WPF ListView并移除颜色覆盖

.net 带外部滚动条的WPF ListView并移除颜色覆盖,.net,wpf,xaml,styles,scrollviewer,.net,Wpf,Xaml,Styles,Scrollviewer,我让XAML看起来像这样 <ScrollViewer> <StackPanel Orientation="Horizontal"> <ListViewer> ... </ListViewer> <ListViewer> ... </ListViewer> </StackPanel> </ScrollViewer> ... ... 问题1。

我让XAML看起来像这样

<ScrollViewer>
  <StackPanel Orientation="Horizontal">
    <ListViewer>
    ...
    </ListViewer>

    <ListViewer>
    ...
    </ListViewer>
  </StackPanel>
</ScrollViewer>

...
...
问题1。 如何确保滚动完全由最外层的scrollviewer处理?如果现在在任何listview控件中使用鼠标滚轮滚动,则不会发生任何滚动。如果我滚动到ListView之外的某个地方,滚动效果与预期一样

问题2。
如何从列表视图中去除突出显示的“鼠标悬停”和“选定”颜色覆盖?

添加一个
PreviewMouseWheel
事件处理程序来手动处理滚动。另外,替换
ListViewItem
ContentTemplate
以自定义其外观(即,删除选择并将鼠标悬停在突出显示上):


您的<>代码> ListVIEW < /C> >开始看起来像一个简单的<代码> ITEMsStase,所以请考虑使用它(尽管<代码> ITEMsStase不属于它自己的滚动行为)。

谢谢!它就像一个符咒!你写道我可以将ListView更改为ItemsControl。我只是需要改变,还是还有更多的东西需要改变?我应该提一下,我当时已经说过了。为什么我会使用ItemsControl而不是ListView控件,这有什么好处吗?再次感谢。是的,只需将
ListView
替换为
ItemsControl
。您不需要处理滚动或删除突出显示。正如您所说,您只需要使用
ItemsControl.ItemTemplate
。其主要优点是,它的结构更简单,可能完全适合您想要做的事情。
<ScrollViewer PreviewMouseWheel="OnPreviewMouseWheel">
    <StackPanel>
        <ListView>
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListViewItem">
                                <Border Padding="4,2">
                                    <ContentPresenter />
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </StackPanel>
</ScrollViewer>
private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    var scrollViewer = (ScrollViewer)sender;
    scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset - e.Delta);
    e.Handled = true;
}