2013-12-12 2 views
3

Я делаю проект в Windows Presentation Foundation. У меня есть ListBox, в котором каждый element такой же height.Переопределить событие прокрутки колеса для увеличения одного элемента вверх/вниз

То, что я хочу достичь, это:

  • Когда я Mouse Wheel Scroll вверх или вниз, я хочу, чтобы увеличить ListBox вид/декремента всегда посредством одного элемента.

То, что я прямо сейчас:

  • Когда я Mouse Wheel Scroll вверх или вниз, это всегда увеличивает/уменьшает пару (в зависимости от экрана высоты) элементов.

Есть ли какие-либо простые решения для этого?

Благодаря

+0

вы должны быть в состоянии отключить прокрутку, но захватите событие прокрутки, а затем используйте 'JQuery' или аналогичный, чтобы затем прокручивать элементы до предопределенной высоты, о которой вы указали. Не спрашивайте меня на примерах :) :) –

ответ

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" /> 

Надеюсь, что поможет

+0

Спасибо! это именно то, что я сделал! За исключением того, что я использовал 'ItemsControl' вместо' ListBox', завернутый в 'ScrollView' с Attached Behavior. Спасибо! –

Смежные вопросы