带有外部滚动条的 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
事件处理程序以手动处理滚动。此外,替换 ListViewItem
的 ContentTemplate
以自定义其外观(即删除选择和鼠标悬停突出显示):
<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
没有自己的滚动行为)。
我 XAML 看起来像这样
<ScrollViewer>
<StackPanel Orientation="Horizontal">
<ListViewer>
...
</ListViewer>
<ListViewer>
...
</ListViewer>
</StackPanel>
</ScrollViewer>
问题一。 如何确保滚动完全由最外层的滚动查看器处理?如果我现在在任何列表视图控件中使用鼠标滚轮滚动,则不会发生任何滚动。如果我在 ListViews 之外的某个地方滚动,滚动会按预期工作。
问题二。 我怎样才能摆脱 ListViews 的突出显示 "mouse over" 和 "selected" 颜色叠加?
添加 PreviewMouseWheel
事件处理程序以手动处理滚动。此外,替换 ListViewItem
的 ContentTemplate
以自定义其外观(即删除选择和鼠标悬停突出显示):
<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
没有自己的滚动行为)。