1.代码方式
public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
if (obj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
{
return (T)child;
}
T childItem = FindVisualChild<T>(child);
if (childItem != null) return childItem;
}
}
return null;
}
public void MyListBox_MouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
ItemsControl items = (ItemsControl)sender;
ScrollViewer scroll = FindVisualChild<ScrollViewer>(items);
if (scroll != null)
{
scroll.ScrollToHorizontalOffset(scroll.HorizontalOffset - e.Delta);
}
}
添加事件
listBox.AddHandler(System.Windows.Controls.ListBox.MouseWheelEvent, new MouseWheelEventHandler(MyListBox_MouseWheel), true);
2.UI加行为
<ListBox.ItemsPanel>
<ItemsPanelTemplate >
<VirtualizingStackPanel Orientation="Horizontal" IsItemsHost="True">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseWheel">
<ei:CallMethodAction MethodName="VirtualizingStackPanel_MouseWheel" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
后台函数
public void VirtualizingStackPanel_MouseWheel(object sender, MouseWheelEventArgs e)
{
VirtualizingStackPanel items = (VirtualizingStackPanel)sender;
ScrollViewer scroll = (ScrollViewer)((ItemsPresenter)items.TemplatedParent).Parent;
if (scroll != null)
{
scroll.ScrollToHorizontalOffset(scroll.HorizontalOffset - e.Delta);
}
}