wpf 中scrollviewer 中放置个LISTBOX,当焦点在LISTBOX时候,滚动鼠标不响应Scrollviewer的鼠标滚动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 中scrollviewer 中放置个LISTBOX,当焦点在LISTBOX时候,滚动鼠标不响应Scrollviewer的鼠标滚动相关的知识,希望对你有一定的参考价值。
是不是要屏蔽掉LISTBOX等其他控件的鼠标滚动事件?求代码
参考技术A Private Sub List1_GotFocus(Index As Integer)List1(Index).BackColor = &H80000005
End Sub
Private Sub List1_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = 37 Then
List1(0).SetFocus
ElseIf KeyCode = 39 Then
List1(1).SetFocus
End If
End Sub
Private Sub List1_LostFocus(Index As Integer)
List1(Index).BackColor = &H80000000
End Sub
WPF 从 TreeView 中删除 ScrollViewer
【中文标题】WPF 从 TreeView 中删除 ScrollViewer【英文标题】:WPF Remove ScrollViewer from TreeView 【发布时间】:2011-03-30 17:55:06 【问题描述】:我想知道是否可以轻松关闭 TreeView 的 ScrollViewer。
我有一个带有网格的用户控件。其中一个 Cell 在 Stackpanel 中有几个 TreeView。控件的高度会根据 TreeView 的高度自动调整,因此不需要滚动条。
问题是:我在带有自己的 ScrollViewer 的 ListBox 中有一堆这些,但是当我使用 MouseWheel 时,当您在 TreeView 上方时滚动停止。
这是因为 TreeView 有自己的 ScrollViewer,它窃取了 MouseWheel。我知道这可能通过覆盖控件模板来实现,但我希望有更简单的方法。
【问题讨论】:
【参考方案1】:您可以使用此处描述的技术:http://serialseb.blogspot.com/2007/09/wpf-tips-6-preventing-scrollviewer-from.html 来防止 ScrollViewer 处理鼠标滚轮事件。将PreviewMouseWheel="HandlePreviewMouseWheel"
添加到您的 TreeView 并将 HandlePreviewMouseWheel 定义为:
private void HandlePreviewMouseWheel(object sender, MouseWheelEventArgs e)
if (!e.Handled)
e.Handled = true;
var eventArg = new MouseWheelEventArgs(
e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
var parent = ((Control)sender).Parent as UIElement;
parent.RaiseEvent(eventArg);
不过,将控件模板更改为不包含 ScrollViewer 并不难,因为 TreeView 的默认模板非常简单,而且大部分复杂性在于处理 ScrollViewer。尝试这样做:
<TreeView.Template>
<ControlTemplate TargetType="TreeView">
<Border BorderBrush="TemplateBinding BorderBrush"
BorderThickness="TemplateBinding BorderThickness"
SnapsToDevicePixels="true">
<ItemsPresenter/>
</Border>
</ControlTemplate>
</TreeView.Template>
【讨论】:
嗯,看来我的最后一条评论不起作用。无论如何,谢谢!我都试过了。 xaml 控件模板运行良好,但 PreviewMouseWheel 在滚动时仍然“卡住”了几次。我将使用 xaml 解决方案。 +1 用于 XAML 解决方案(同样适用于同样的问题) 完美。我将这个处理程序与EventManager.RegisterClassHandler
一起使用,以摆脱订阅所有相同类型的控件来解决问题的需要。以上是关于wpf 中scrollviewer 中放置个LISTBOX,当焦点在LISTBOX时候,滚动鼠标不响应Scrollviewer的鼠标滚动的主要内容,如果未能解决你的问题,请参考以下文章
安卓ScrollView中放ViewPager+ViewPager,ViewPager中放的是2个Fragment,Fragment中放Listview.