我在Windows Presentation Foundation中做了一个项目。
我有一个ListBox
,其中每element
都是height
。
我想要达到的目标是:
Mouse Wheel Scroll
向上或向下时,我希望ListBox
总是通过一个元素递增/递减视图。我现在拥有的东西:
Mouse Wheel Scroll
向上或向下时,它总是增加/减少几个(取决于屏幕高度)元素。对此有什么简单的解决方案吗?
由于
答案 0 :(得分:1)
简单地快速破解(这意味着你可以以更好的方式做到这一点,也许是附加行为)
private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
var lb = sender as ListBox;
if (lb != null) {
// get or store scrollviewer
if (lb.Tag == null) {
lb.Tag = GetDescendantByType(lb, typeof(ScrollViewer)) as ScrollViewer;
}
var lbScrollViewer = lb.Tag as ScrollViewer;
if (lbScrollViewer != null) {
if (e.Delta < 0) {
lbScrollViewer.LineDown();
} else {
lbScrollViewer.LineUp();
}
e.Handled = true;
}
}
}
GetDescendantByType方法
public static Visual GetDescendantByType(Visual element, Type type)
{
if (element == null) {
return null;
}
if (element.GetType() == type) {
return element;
}
Visual foundElement = null;
if (element is FrameworkElement) {
(element as FrameworkElement).ApplyTemplate();
}
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++) {
Visual visual = VisualTreeHelper.GetChild(element, i) as Visual;
foundElement = GetDescendantByType(visual, type);
if (foundElement != null) {
break;
}
}
return foundElement;
}
使用
<ListBox PreviewMouseWheel="OnPreviewMouseWheel" />
希望有所帮助