带有外部滚动条的 WPF ListView 并删除颜色覆盖

WPF ListView with external scrollbar and remove color overlay

我 XAML 看起来像这样

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

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

问题一。 如何确保滚动完全由最外层的滚动查看器处理?如果我现在在任何列表视图控件中使用鼠标滚轮滚动,则不会发生任何滚动。如果我在 ListViews 之外的某个地方滚动,滚动会按预期工作。

问题二。 我怎样才能摆脱 ListViews 的突出显示 "mouse over" 和 "selected" 颜色叠加?

添加 PreviewMouseWheel 事件处理程序以手动处理滚动。此外,替换 ListViewItemContentTemplate 以自定义其外观(即删除选择和鼠标悬停突出显示):

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

您的 ListView 开始看起来像一个简单的 ItemsControl,因此请考虑使用它(尽管 ItemsControl 没有自己的滚动行为)。