Scrollbar 滚动条嵌套响应鼠标滑轮事件的处理
需要内部控件实现滚动的控件(比如treeview1中的内容超过面板大小时,滚动条会自动出现,鼠标在控件内部内容上时),鼠标滚轮滚动无效。
滚动条嵌套响应鼠标滑轮事件的处理,由于xaml前台绑定时触发不了MouseWheel事件,需要在构造函数中引发鼠标滚轮的路由事件。
public UC_XXXXXX()
{
InitializeComponent();
treeview1.PreviewMouseWheel -= (sender, e) => { };
treeview1.PreviewMouseWheel += (sender, e) =>
{
var eventArgs = new System.Windows.Input.MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
eventArgs.RoutedEvent = UIElement.MouseWheelEvent;
eventArgs.Source = sender;
this.treeview1.RaiseEvent(eventArgs);
};
}
优化
匿名委托无法取消订阅事件,可能造成多次调用;可封装一个完整的事件函数进行调用。
treeview1.PreviewMouseWheel -= MouseWheelEventHandlerMethod;
treeview1.PreviewMouseWheel += MouseWheelEventHandlerMethod;
/// <summary>
/// 滚轮响应事件函数
/// </summary>
public static readonly MouseWheelEventHandler MouseWheelEventHandlerMethod = (object sender, MouseWheelEventArgs e) =>
{
var eventArgs = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = UIElement.MouseWheelEvent,
Source = sender
};
((UIElement)sender).RaiseEvent(eventArgs);
};

浙公网安备 33010602011771号