2013-12-12 93 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'代替'ScrollView'中包含的具有附加行爲的'ListBox'。 謝謝! –