.net 带外部滚动条的WPF ListView并移除颜色覆盖
我让XAML看起来像这样.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。
<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;
}