代码之家  ›  专栏  ›  技术社区  ›  Johan

带外部滚动条的wpf listview并删除颜色覆盖

  •  1
  • Johan  · 技术社区  · 6 年前

    我有像这样的XAML

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

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   redcurry    6 年前

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

    <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 ,因此考虑改用它(尽管 项目控制 不会有自己的滚动行为)。