WPF解决ScrollViewer中带有ItemsControl时鼠标滚动问题
ScrollViewer应该是经常使用的一个控件之一,平时在ScrollViewer中添加普通控件并不会出现什么问题,但是一旦添加了ItemsControl时会出现仅在ItemsControl中进行滚动,添加以下方法即可完美解决:
public void UseTheScrollViewerScrolling(FrameworkElement fElement)
{
fElement.PreviewMouseWheel += (sender, e) =>
{
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
fElement.RaiseEvent(eventArg);
};
}
实际上就是将ItemsControl的滚动事件与外层的ScrollViewer的滚动关联起来就可以了,注意:代码中使用了FrameworkElement类型的参数,因为这个方法的作用是让内层的ItemsControl与外层的ScrollViewer关联起来,但当两者之间还有别的元素时,这个方法的参数应该传入的是ScrollViewer的直接子元素,而不是深层的ItemsControl。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
UseTheScrollViewerScrolling(grid);
}
public void UseTheScrollViewerScrolling(FrameworkElement fElement)
{
fElement.PreviewMouseWheel += (sender, e) =>
{
var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArg.RoutedEvent = UIElement.MouseWheelEvent;
eventArg.Source = sender;
fElement.RaiseEvent(eventArg);
};
}
}